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