如何在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如果您的方法没有打印出来或在打印后突然变得更快,您可以看到可能的原因。