JVM如何决定是使用JIT还是解释字节码?

时间:2016-08-31 07:15:17

标签: java interpreter jit

在互联网上搜索了一段时间之后,我没有找到一个完美的答案,JVM在哪个参数(或标志)决定是否应该使用JIT来编译字节码并运行它或解释字节码。

简而言之,这个选项有任何默认值,意味着我说

> javac xyz.java    
> java xyz

并没有其他参数可以运行,JIT还是解释器?

问题因为过于宽泛而被搁置,所以为了缩短它,让我澄清一下我不想理解JIT或口译员的工作原理,我也不想要"程序"他们如何决定解释或使用JIT。我只是想知道在做出这些决定时很重要的参数(可能是程序大小,运行环境等)。

感谢您提前回答

1 个答案:

答案 0 :(得分:1)

javac,java编译器总是创建字节代码(好吧,除非你谈论从java源代码创建静态“本机代码”二进制文件的非常特殊的产品)。

用于编译JVM中的本机代码 - 该决定在运行时发生!

含义:JVM开始解释字节码。这样做可以保持统计数据。根据各种启发式方法,JVM / JIT将在某个时候决定将字节代码编译为本机代码。这意味着:当JVM进程结束时,所有本机代码都将丢失!

使JIT成为如此有趣的技术的一件事是,如果事情发生变化,JIT甚至可以“重新编译”为原生;如果它认为不同的优化是有意义的。

例如,可以找到here的进一步阅读。