reservedcodecachesize
JVM在解释器之外引入了即时编译器(Just In Time),以此来提升Java性能。这里介绍一下JIT实践相关的参数。
1.编译相关的参数
-XX:+TieredCompilation:开启分层编译,JDK8之后默认开启
-XX:+CICompilerCount=N:编译线程数,设置数量后,JVM会自动分配线程数,C1:C2 = 1:2
-XX:TierXBackEdgeThreshold:OSR编译的阈值
-XX:TierXMinInvocationThreshold:开启分层编译后各层调用的阈值
-XX:TierXCompileThreshold:开启分层编译后的编译阈值
-XX:ReservedCodeCacheSize:codeCache最大大小
-XX:InitialCodeCacheSize:codeCache初始大小
其中-XX:TierXMinInvocationThreshold是开启分层编译的情况下,触发编译的阈值参数,当方法调用次数大于由参数
-XX:TierXInvocationThreshold指定的阈值乘以系数,或者当方法调用次数大于由参数
-XX:TierXMINInvocationThreshold指定的阈值乘以系数,并且方法调用次数和循环回边次数之和大于由参数-XX:TierXCompileThreshold指定的阈值乘以系数时,便会触发X层即时编译。分层编译开启下会乘以一个系数,系数根据当前编译的方法和编译线程数确定,降低阈值可以提升编译方法数,一些常用但是不能编译的方法可以编译优化提升性能。
2.查看编译日志
通过添加-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation -XX:+PrintInlining -XX:+PrintCodeCache -XX:+
PrintCodeCacheOnCompilation -XX:+TraceClassLoading -XX:+LogCompilation -XX:LogFile=LogPath参数可以输出编译、内联、codeCache信息到文件。文件可以通过JITwatch(网页链接)进行查看分析。
附,分层编译(折中编译速度和编译质量)的五个层级
1,解释执行。
2,执行不带profiling的C1代码。
3,执行仅带方法调用次数以及循环回边执行次数profiling的C1代码。
4,执行带所有profiling的C1代码。
5,执行C2代码





