Nat*_*han 20 java jit jvm-hotspot compiler-flags
HotSpot的分层编译使用解释器,直到调用(对于方法)或迭代(对于循环)的阈值触发具有自分析的客户端编译.使用客户端编译,直到另一个调用或迭代阈值触发服务器编译.
打印HotSpot的标志使用-XX:+ TieredCompilation显示以下标志值.
intx CompileThreshold = 10000 {pd product}
intx Tier2CompileThreshold = 0 {product}
intx Tier3CompileThreshold = 2000 {product}
intx Tier4CompileThreshold = 15000 {product}
Run Code Online (Sandbox Code Playgroud)
仅有客户端和服务器编译器的标志太多.哪些编译器由这些标志控制?如果不是客户端和服务器,其他编译器的目的是什么?
在这种情况下是否忽略CompileThreshold和Tier2CompileThreshold?触发客户端编译时Tier3CompileThreshold控制什么?触发服务器编译时Tier4CompileThreshold控制什么?
Nat*_*han 22
advancedThresholdPolicy.hpp中的注释讨论了不同的编译器层和阈值.请参阅该文件以进行更深入的讨论.
系统支持5个执行级别:
C1是客户端编译器.C2是服务器编译器.
在通常情况下,编译为:0→3→4.根据C1和C2队列长度使用非典型情况.当C2队列长度太长时使用第2层,以便该方法可以执行大约30%的速度,直到C2可以处理分析信息.如果确定该方法是微不足道的,那么它将使用第1层进行编译,因为它将生成与第4层相同的代码.
根据C1和C2队列的长度动态调整阈值.