当前位置: 首页 > 知识库问答 >
问题:

JVM如何决定是使用JIT还是解释字节码?[已关闭]

仲孙小云
2023-03-14

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

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

> javac xyz.java    
> java xyz

没有其他参数可以运行什么,JIT或解释器?

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

提前谢谢你的回答

共有1个答案

訾俊名
2023-03-14

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

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

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

JIT之所以成为一项如此有趣的技术,是因为如果情况发生变化,JIT甚至可以“重新编译”为本机;如果它认为不同的优化是有意义的。

例如,可以在此处找到进一步的阅读。

 类似资料:
  • 据我所知,JIT将字节码编译成运行速度更快的本机代码。因此,根据我的信念,我的问题的答案应该是1。翻译成机器代码2。解释字节码。因为解释代码意味着执行代码。但我发现答案恰恰相反!谁能解释一下。。。提前感谢

  • 问题内容: 我对JVM有一个非常基本的问题:它是编译器还是解释器? 如果它是解释器,那么JVM内部存在的JIT编译器怎么办? 如果两者都不是,那么JVM到底是什么?(我不希望将字节码转换为机器特定的代码等jVM的基本定义。) 问题答案: 首先,让我们对以下术语有一个清晰的认识 是Java编译器-将Java代码编译为 Bytecode 是Java虚拟机-运行/解释/将字节码转换为本 机代码 是即时编

  • 本文向大家介绍如何决定使用 HashMap 还是 TreeMap?相关面试题,主要包含被问及如何决定使用 HashMap 还是 TreeMap?时的应答技巧和注意事项,需要的朋友参考一下 对于在 Map 中插入、删除、定位一个元素这类操作,HashMap 是最好的选择,因为相对而言 HashMap 的插入会更快,但如果你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。

  • 问题内容: 在CPython的上下文中,我并没有真正理解“字节码解释器”的概念。有人可以说明整个情况吗? 这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么什么将py文件编译为pyc文件呢?而且Jython与CPython有何不同(除了它们以不同的语言实现)。 我还在某处读到Python是C ++的解释。这个对吗?那是什么意思呢? 我对Python还是很陌生,所以请原谅我这个愚

  • 问题内容: 对于长数据类型,我可以在L后面加上数字以使编译器知道它长。字节和短怎么样? 作为动机,以下产生类型不匹配错误: 问题答案: 您实际上在谈论的是整数 文字 ()与长 文字 ()。实际上,在Java中没有短或字节字面量。但它 通常 并不重要,因为从整数常量的类型的隐式转换,和。从而: 仅当文字在所需范围内时,才允许隐式转换。如果不是,则需要类型转换。例如 在其他情况下,需要显式转换;例如,

  • 问题内容: 我多次听到Java妨碍JIT(即时)编译的情况,其可跨平台移植的字节码被JVM“解释”。但是,我真的不知道字节码是什么,以及JVM在Java语言体系结构中的实际含义。我想进一步了解他们。 问题答案: JVM(Java虚拟机)具有与真实计算机一样的指令集。给该指令集的名称是Java字节码。在Java虚拟机规范中对其进行了描述。其他语言在执行之前会被翻译成字节码,例如ruby和python