有没有办法关闭 JIT 编译器,这样做会影响性能吗?
Posted
技术标签:
【中文标题】有没有办法关闭 JIT 编译器,这样做会影响性能吗?【英文标题】:Is there a way to turn off JIT compiler and is there a performance impact by doing so? 【发布时间】:2015-12-16 15:31:18 【问题描述】:JIT 对 Java 程序意味着什么?它是否使执行速度更快?或者是否有不是 JIT 的字节码?
【问题讨论】:
【参考方案1】:有两种方法可以禁用 JIT
-Djava.compiler=NONE
或者这几乎不会编译任何东西
-XX:CompileThreshold=2000000000
或在 IBM JVM 上
-nojit
禁用 JIT 会大大降低您的代码速度,例如50 倍,但并非总是如此。如果您将大部分时间花在 IO 或 GUI 更新上,您可能会发现这没什么区别。
【讨论】:
我正在学习 java 并且对大多数东西有很多疑问.....谢谢您的回答。 :) 进一步我想知道当我们禁用 JIT 时会使用什么编译器? @CoDerus 禁用 JIT 意味着没有编译器。相反,代码仅在解释器模式下运行。 我有点惊讶这个古老的java.compiler
属性仍然有效,尽管你不能真正使用它来指定实际的编译器实现,所以我调查了一下,发现 JDK-8227229 解释了一个历史的一部分,还揭示了一个令人惊讶的事实,即指定 -Xdebug
会使 -Djava.compiler=NONE
无效,因此使用 -Xint
一直是更可靠的选择。【参考方案2】:
来自doc,
-Xint
以仅解释模式运行应用程序。禁止编译为本机代码,所有字节码都由解释器执行。
java.compiler
系统属性在 Java 9 之前为 Compiler 类所知。在 Java 9 中,它被标记为 @Deprecated
。
【讨论】:
【参考方案3】:对于 IBM,正确的选项是 -Xnojit 或 -Xint
【讨论】:
这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review 当我写下他的答案时,我不被允许发表评论。否则,我会的。【参考方案4】:在 HotSpot VM 中,可以使用选项 -XX:-UseCompiler
禁用 JIT 编译,该选项跳过编译器线程初始化。
是true
by default:
product(bool, UseCompiler, true,
"Use Just-In-Time compilation")
【讨论】:
以上是关于有没有办法关闭 JIT 编译器,这样做会影响性能吗?的主要内容,如果未能解决你的问题,请参考以下文章