我已经使用过-XX:+PrintCompilation
,并且我知道JIT编译器的基本技术以及为什么要使用JIT编译。
然而,我仍然没有找到JVM如何决定何时对方法进行JIT编译的答案,即“JVM在何时将方法JIT编译”。
我是否正确地假设每个方法都会被解释,并且只有当它未被归类为“热方法”时才不会被编译?我记得曾经读到一个方法被执行了至少10,000次后就会被视为“热方法”,但我必须承认我不确定这是从哪里读到的。
因此,总结我的问题:
(1) 只要方法未被归类为“热方法”(因此已编译),它就会被解释吗?或者有其他原因使方法在不是“热方法”的情况下被编译吗?
(2) JVM如何将方法归类为“非热”和“热”方法?执行次数?还是其他什么?
(3) 如果存在某些阈值(例如执行次数)用于“热”方法,则是否有Java标志(-XX:...
)来设置这些阈值?
-XX:+PrintFlagsFinal
的输出,有很多与JIT编译器及其层次、内联、方法大小、编译器线程等相关的标志。 - the8472