gpt4 book ai didi

java - JIT 与口译员

转载 作者:IT老高 更新时间:2023-10-28 20:54:50 26 4
gpt4 key购买 nike

我找不到 JIT 和解释器之间的区别。

Jit 是解释器和编译器的中介。在运行时,它将字节码转换为机器码(JVM 或实际机器?)下一次,它从缓存中取出并运行我说的对吗?

解释器将直接执行字节码而不将其转换为机器码。对吗?

我们电脑中的真正处理器如何理解指令?

请消除我的疑虑。

最佳答案

第一件事:
对于 JVM,解释器和编译器都是(JVM 编译器,而不是像 javac 这样的源代码编译器)生成 native 代码(又名机器语言代码,用于底层物理 CPU,如 x86 ) 来自字节码

那有什么区别:
不同之处在于它们如何生成 native 代码、优化程度以及优化成本。非正式地,解释器通过查找预定义的 JVM 指令到机器指令映射(见下图),几乎将每个字节码指令转换为相应的 native 指令。有趣的是,如果我们将一段字节码转换为机器码,则可以进一步加快执行速度 - 因为考虑整个逻辑部分通常会提供优化空间而不是转换(解释) 隔离的每一行(到机器指令)。将一段字节码转换为(可能是优化的)机器指令的这种行为称为编译(在当前上下文中)。当编译在运行时完成时,编译器称为 JIT 编译器。

enter image description here

关联与协调:
由于 Java 设计者追求(硬件和操作系统)可移植性,他们选择了解释器架构(而不是 c 风格的编译、组装和链接)。但是,为了获得更高的速度,还可以选择将编译器添加到 JVM。尽管如此,随着程序继续被解释(并在物理 CPU 中执行),JVM 会检测到“热点”并生成统计信息。因此,使用来自解释器的统计信息,这些部分成为编译的候选(优化的 native 代码)。它实际上是即时完成的(因此是 JIT 编译器),并且编译的机器指令随后会被使用(而不是被解释)。自然地,JVM 也会缓存这些编译后的代码。

注意事项:
这些几乎是基本概念。如果是 JVM 的实际实现者,它的方式有点不同,请不要感到惊讶。其他语言的虚拟机也是如此。

注意事项:
诸如“解释器在虚拟处理器中执行字节码”、“解释器直接执行字节码”等语句都是正确的,只要您了解最终必须在物理硬件中运行一组机器指令即可。

一些很好的引用资料: [虽然我没有进行广泛的搜索]

  • [paper] 基于硬件翻译的 Java 虚拟中的指令折叠Hitoshi Oi 的机器
  • [书] 计算机组织与设计,第 4 版,D. A. Patterson。 (见图 2.23)
  • [网络文章] JVM 性能优化,第 2 部分:编译器,作者:Eva Andreasson(JavaWorld)

PS:我交替使用了以下术语 - “ native 代码”、“机器语言代码”、“机器指令”等。

关于java - JIT 与口译员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com