有没有办法从JVM内部判断特定方法是否已被JIT编译?

Rex*_*err 6 java performance jit jvm microbenchmark

在编写微基准测试时,可以观察到运行时的巨大差异,具体取决于方法是否已编译.有没有办法从程序中判断是否编译了特定方法?或者,是否有一种方法可以请求它,或者知道如何在没有任何额外信息(例如传递给JVM的标志)的情况下充分加热它?显然,这不一定是完美的(例如,可能存在一些导致JVM回退到解释代码的条件),但它肯定会有所改进.

npe*_*npe 3

对于 Sun/Oracle JVM,您可以使用该-XX:CompileThreshold=1000设置。

正如官方文档所述,这定义了:

编译前方法调用/分支的数量

然后,只需使用该数字来“预热”JVM。

您还可以将-XX:-PrintCompilation与 一起使用-XX:CompileThreshold,以便在编译方法时收到通知(在控制台中)。