在互联网上搜索了一段时间之后,我没有找到一个完美的答案,JVM在哪个参数(或标志)决定是否应该使用JIT来编译字节码并运行它或解释字节码。
简而言之,这个选项有任何默认值,意味着我说
> javac xyz.java
> java xyz
并没有其他参数可以运行,JIT还是解释器?
问题因为过于宽泛而被搁置,所以为了缩短它,让我澄清一下我不想理解JIT或口译员的工作原理,我也不想要"程序"他们如何决定解释或使用JIT。我只是想知道在做出这些决定时很重要的参数(可能是程序大小,运行环境等)。
感谢您提前回答
答案 0 :(得分:1)
javac,java编译器总是创建字节代码(好吧,除非你谈论从java源代码创建静态“本机代码”二进制文件的非常特殊的产品)。
用于编译JVM中的本机代码 - 该决定在运行时发生!
含义:JVM开始解释字节码。这样做可以保持统计数据。根据各种启发式方法,JVM / JIT将在某个时候决定将字节代码编译为本机代码。这意味着:当JVM进程结束时,所有本机代码都将丢失!
使JIT成为如此有趣的技术的一件事是,如果事情发生变化,JIT甚至可以“重新编译”为原生;如果它认为不同的优化是有意义的。
例如,可以找到here的进一步阅读。