Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查JIT编译器是否关闭_Java_Compiler Construction_Jit - Fatal编程技术网

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

如何在Java中检查JIT编译器是否关闭,java,compiler-construction,jit,Java,Compiler Construction,Jit,我想知道如何检查JIT编译器是否已关闭。我有下面的代码用于关闭JIT编译器。问题是,我不确定它是否真的这样做了。所以我想知道是否有办法检查JIT是否关闭。 我查看了编译器类,但没有任何类似isDisabled/enabled()的方法 代码: Compiler.disable(); 任何帮助或指导都将不胜感激。我不相信您可以在运行时关闭JIT 如果您想认真地对Java程序进行基准测试,那么肯定应该忽略前几次运行。在Java中获得可靠的基准测试是一项非常棘手的工作,最好留给比你或我聪明得多的

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

代码:

Compiler.disable();  

任何帮助或指导都将不胜感激。

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

如果您想认真地对Java程序进行基准测试,那么肯定应该忽略前几次运行。在Java中获得可靠的基准测试是一项非常棘手的工作,最好留给比你或我聪明得多的人去做


我建议使用,这是谷歌内部用于微基准营销的,在预热JIT等方面非常聪明。特别是,看看这个例子,它展示了如何测量不同输入大小的算法的效率。

你可以在编译方法时打印出来,如果你的方法没有打印出来或者打印出来后突然变快,你可以看到可能的原因。

(这不是对您的问题的直接回答,因为您似乎试图以编程方式关闭JIT编译器,但根据您的评论,这可能是您感兴趣的。)

如果要在Sun/Oracle JVM上关闭JIT编译器,应尝试以下操作:

-Xint

在仅解释模式下操作。禁用编译为本机代码,并且所有字节码都由解释器执行 Java HotSpot客户端VM的自适应 编译器在此模式下不存在


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

我在IBM的JIT编译器团队工作。我们通常不建议人们使用此接口,因为干扰JIT编译试探法通常不是一个好主意,但您可以在一些合理的实时场景中使用它。

JIT编译器最初是在年作为性能更新提供的 Java开发工具包(JDK)1.1.6软件版本,现在是 在中使用java解释器命令时调用的标准工具 Java2平台发布版

可以使用禁用JIT编译器 Java虚拟机的
-Djava.compiler=NONE
选项


因此,您可以推断,当变量未设置或设置为“无”以外的值时,JIT将启用。

是否要在运行时检查此项?是的,我想在运行时检查它。也许我还应该添加执行此操作的原因。基本上,我们有一个程序,用于计算运行算法所需的时间(例如快速排序)根据数据的大小。我们注意到,前两次与其他结果相比确实存在偏差,我们认为这是由于JIT编译器的初始化。因此,我们希望看到JIT关闭时的效果。这不是一个真正的布尔值,方法得到优化和deop在不同的层中进行了优化。最好使用支持预热的基准测试工具。我会使用JMH。它甚至有编译器控制注释。在运行时检查的另一个原因是,我有一个应用程序在某个时间点后似乎切换到仅解释模式。我跟踪到了一个JIT错误()这似乎有关系。我想知道是否有什么东西“呜呜”了内存并覆盖了那个标志。谢谢路易斯。这是我最后一年的项目。我们实际上也考虑过忽略前几次运行。我想这是目前最简单的选择。我还将看看卡尺。该项目是实现您正在测量的算法,还是进行基准测试?它基本上是运行用户使用的算法g反射,然后用O表示法对其进行分析。另外,让我困惑的是,在IBM的网站()上,它确实说明了如何关闭JIT编译器,或者我误解了消息?如果代码缓存用完,它可能会关闭。在这种情况下,它会打印“CodeCache已满。编译器已被禁用”支持哪种版本的Java?因为我得到了
javac:invalid标志:-Xint
@ErikAllik,当您在Oracle JRE 8中键入
Java-X
时,它在选项中可用。是否使用JIT编译器是JRE的决定,这与将源代码编译成字节码无关(什么
javac
):你可能会遇到这个错误,因为你在
javac
中使用它,而不是
java
。哦,废话……你完全正确;我现在觉得自己很迟钝;我知道你说的一切:)是的。它在工作。如何知道Djava.compiler的当前值?