有没有办法关闭JIT编译器,这样做会对性能产生影响吗?

CoD*_*rus 8 interpreter jit jvm bytecode compiler-optimization

对于一个Java程序来说JIT的意义是什么,它是否能使执行速度更快或是否存在不是JIT的字节码?

Pet*_*rey 16

有两种方法可以禁用JIT

-Djava.compiler=NONE 
Run Code Online (Sandbox Code Playgroud)

或者这几乎不会编译任何东西

-XX:CompileThreshold=2000000000
Run Code Online (Sandbox Code Playgroud)

或者在IBM JVM上

-nojit
Run Code Online (Sandbox Code Playgroud)

禁用JIT会使代码变慢,例如50倍,但并非总是如此.如果您花费大部分时间进行IO或GUI更新,您可能会发现它没什么区别.

  • @CoDerus禁用JIT意味着没有编译器.而是代码仅在解释器模式下运行. (3认同)
  • 我有点惊讶的是,这个古老的“java.compiler”属性仍然有效,尽管你不能真正使用它来指定实际的编译器实现,所以我调查了一下并发现[JDK-8227229](https://bugs. openjdk.java.net/browse/JDK-8227229)它解释了一些历史,还揭示了一个令人惊讶的事实,即指定“-Xdebug”会使“-Djava.compiler=NONE”无效,因此始终使用“-Xint”是更可靠的选择。 (3认同)

Hon*_*ong 7

文档中

-Xint
Run Code Online (Sandbox Code Playgroud)

以仅解释模式运行应用程序。禁止编译为本机代码,所有字节码都由解释器执行。

java.compiler系统属性被称为编译器级Java 9.在之前的Java 9它被标记为@Deprecated