我想知道如何检查JIT编译器是否已关闭。我有以下代码,这意味着关闭JIT编译器。问题是,我不确定它是否真的这样做。所以我想知道是否有办法检查JIT是否关闭。
我查看了Compiler类,但没有像isDisabled/enabled()
这样的方法。
代码:
Compiler.disable();
任何帮助或指示都将受到高度赞赏。
答案 0 :(得分:22)
(不是你问题的直接答案,因为你似乎试图以编程方式关闭JIT编译器,但根据你的评论,这可能会引起人们的兴趣。)
如果要关闭Sun / Oracle JVM上的JIT编译器,应该尝试-Xint
option:
<强> -Xint 强>
以仅解释模式操作。禁用对本机代码的编译,并且解释器将执行所有字节码。该 Java HotSpot客户端VM的自适应性提供的性能优势 编译器不会出现在这种模式下。
答案 1 :(得分:10)
我不相信你可以在运行时关掉JIT。
如果你想认真地对Java程序进行基准测试,你绝对应该忽略前几次运行。在Java中获得可靠的基准测试是一项非常棘手的业务,最好留给比你或我更聪明的人。
我建议使用Caliper,它在Google内部用于微观基准测试,并且非常聪明地预热JIT和其他东西。特别是,请查看示例here,其中显示了如何衡量不同输入大小的算法效率。
答案 2 :(得分:7)
我相信IBM JVM肯定支持Java 5中引入的Java接口java / lang / Compiler.disable()和.enable()。这包括WebSphere Real Time(它是一个旨在提供更可预测性能的JVM)以及我们的“标准”JVM。如果调用disable(),它将阻止JIT编译,直到您调用enable()。
我在JIT编译团队中为IBM工作。我们通常不建议人们使用这个界面,因为干扰JIT编译启发式通常不是一个好主意,但是有合理的实时场景你可以使用它。
答案 3 :(得分:7)
在文章Performance Features and Tools中。
JIT编译器首次作为性能更新提供 Java Development Kit(JDK)1.1.6软件版本现已推出 在您使用java解释器命令时调用的标准工具 Java 2平台发布。
您可以使用禁用JIT编译器 Java VM的
-Djava.compiler=NONE
选项。
因此,您可以推断,当未设置变量或设置为NONE以外的其他值时,则启用JIT。
答案 4 :(得分:4)
你可以在编译时打印输出方法,使用`-XX:+ PrintCompilation如果你的方法没有打印出来或者在打印出来之后突然变快,你可以看到可能的原因。