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

isa*_*iah 9 java compiler-construction jit

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

码:

Compiler.disable();  
Run Code Online (Sandbox Code Playgroud)

任何帮助或方向将受到高度赞赏.

Bru*_*uno 22

(不是你的问题的直接答案,因为你似乎试图以编程方式关闭JIT编译器,但根据你的评论,这可能是有意义的.)

如果要在Sun/Oracle JVM上关闭JIT编译器,则应尝试以下-Xint选项:

-Xint

以仅解释模式运行.禁用对本机代码的编译,并且解释器将执行所有字节码.Java HotSpot客户端VM的自适应编译器提供的性能优势将不会出现在此模式下.


Lou*_*man 10

我不相信你可以在运行时关闭JIT.

如果你想认真地对Java程序进行基准测试,你肯定会忽略前几次运行.在Java中获得可靠的基准测试是一件非常棘手的事情,最好留给比你或我更聪明的人.

我建议使用Caliper,它在Google内部用于微基准测试,并且非常聪明地预热JIT和其他东西.特别是,请查看此处的示例,其中显示了如何针对不同的输入大小测量算法的效率.


小智 7

我相信IBM JVM肯定支持Java 5中引入的Java接口java/lang/Compiler.disable()和.enable().这包括WebSphere Real Time(它是一个旨在提供更可预测性能的JVM)以及我们的"标准"JVM.如果调用disable(),则在调用enable()之前,它将阻止JIT编译.

我在JIT编译团队中为IBM工作.我们通常不建议人们使用这个界面,因为干扰JIT编译启发式通常不是一个好主意,但是有合理的实时场景可以使用它.


Edw*_*rzo 7

性能特征和工具文章中.

JIT编译器最初在Java Development Kit(JDK)1.1.6软件版本中作为性能更新提供,现在是在Java 2平台版本中使用java interpreter命令时调用的标准工具.

您可以使用-Djava.compiler=NONEJava VM 的选项禁用JIT编译器.

因此,您可以推断出当未设置变量或设置为NONE以外的其他值时,则启用JIT.


Pet*_*rey 5

你可以在编译时打印出方法,如果你的方法没有打印出来或者打印出来后突然变快,你可以用`-XX:+PrintCompilation 来查看可能的原因。