如何在Java中检查JIT编译器是否已关闭

时间:2012-02-26 21:37:21

标签: java compiler-construction jit

我想知道如何检查JIT编译器是否已关闭。我有以下代码,这意味着关闭JIT编译器。问题是,我不确定它是否真的这样做。所以我想知道是否有办法检查JIT是否关闭。 我查看了Compiler类,但没有像isDisabled/enabled()这样的方法。

代码:

Compiler.disable();  

任何帮助或指示都将受到高度赞赏。

5 个答案:

答案 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如果你的方法没有打印出来或者在打印出来之后突然变快,你可以看到可能的原因。