ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JIT编译日志

2022-07-30 13:32:01  阅读:220  来源: 互联网

标签:编译器 HotSpot 编译 JIT C2 C1 XX 日志


一个所有性能工程师都应该知道的重要JVM开关是:

-XX:+PrintCompliation

这将导致在STDOUT(标准输出)上生成一个编译事件的日志,从而使得工程师可以基本了解正在编译的内容。

PrintCompliation提供的细节有限,要访问更多关于HotSpot JIT编译器所做决策的编译信息,可以使用:

-XX:+LogCompliation
-XX:+UnlockDiagnosticVMOptions

这指示虚拟机输出一个包含XML标记的日志文件,该标记表示从字节码向原生代码转换过程中与队列和优化相关的信息。LogCompliation标志会很冗长,并生成数百MB的XML输出。

diagnostic
adj. 诊断的; 判断的;
n. 诊断程序(诊断计算机的错误); 诊断提示(计算机错误的显示); 诊断; 诊断法;

然而,开源的JITWatch工具,它可以解析这个文件,并以更容易理解的格式呈现这些信息。

https://github.com/AdoptOpenJDK/jitwatch

HotSpot JVM中实际上有两种JIT编译器,而不是一种。它们的正式名称分别为C1和C2,
但有时也被称为客户端编译器和服务器编译器。过去C1用于GUI应用程序和其他“客户端”
程序,而C2用于长期运行的“服务器”应用程序。现代JAVA应用程序通常模糊了这一区别,
而HotSpot利用了这一新趋势。

一个编译后的代码单元被称为nmethod(national method的缩写)

两种编译器所采取的一般方法都是依赖一个关键的测量值来触发编译:一个方法被调用的次数,或者是调用计数(invocation count),一旦这个计数器达到某个特定阈值,虚拟机就会收到通知,并考虑将该方法加入编译队列。

image

编译过程首先会为方法创建一个内部表示,接下来将结合在解释阶段所收集的剖析信息
进行优化,然而,C1和C2所产生的代码内部表示非常不同,与C2相比,C1被设计得更简单,编译时间更短。权衡的结果是,C1没有像C2那样得到充分的优化。
两者共同使用的一种技术是静态单一赋值(static single assignment,SSA),这本质上
是将程序转换为一种这样的形式:每个变量只被赋值一次,不会发生重新赋值。用Java
的编程术语就是说程序实际上被重写为只包含final变量。

标签:编译器,HotSpot,编译,JIT,C2,C1,XX,日志
来源: https://www.cnblogs.com/ukzq/p/16534804.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有