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

如果JIT正在执行字节码到机器指令的转换,那么JVM有什么用处

凌声
2023-03-14

我真的很难理解下面的事情

以前我知道:

当一个Java程序被编译时,将生成class文件。在该代码中是字节的形式。然后JVM将该字节代码转换为机器可理解的格式。

现在我看到SO中的一个问题

实时(JIT)编译器是运行时解释器的一个功能,它不是每次调用方法时都解释字节码,而是将字节码编译成运行机器的机器码指令

因此,这里JIT将字节码转换为机器指令。那么JVM的用途是什么呢。我们可以通过JIT实现这一点。据我所知,JIT只是为了提高JVM的性能。

共有3个答案

程旭尧
2023-03-14

Java虚拟机(JVM)提供了运行Java程序的整个环境。它与操作系统集成,加载类并运行程序。实时编译器(JIT)只是一个小部件,可以禁用(-Xint),但启用后,可以有效提高性能。有一些JVM的实现不包括JIT,还有一些实现是通过将Java预编译为机器代码来工作的,与传统语言(如C或C)一样。

冷吉星
2023-03-14

需要明确的是:

JVM执行以下操作:

它位于操作系统的顶部,并在已编译的java程序和操作系统之间提供抽象。这样,java编译程序就不必担心它必须在哪个平台上工作。Java程序将代码编译成JVM可以理解和执行的字节码。

JIT

JVM编译类文件时,它不会完成完整的类文件;它只根据需要编译其中的一部分。这避免了对完整源代码的大量解析。这种类型的编译称为JIT或即时编译。JVM是平台(OS)依赖的代码生成JIT是面向平台的,生成本机字节码,因此它比JVM更快:)

咸昀
2023-03-14

JIT只是JVM的一部分。其他部分包括字节码解释器、类加载验证和链接机制,以及对反射、I/O等内容的本机代码支持。

从这个意义上讲,JIT根本不会使JVM运行得更快。相反,它使Java代码运行更快。。。如果JVM只是对其进行解释的话,情况会更糟。

实际上,JVM确实开始解释字节码。一段时间后,JVM使用其即时编译器将大量使用的方法编译为本机代码,使用解释时收集的统计信息来调整代码以解决当前问题。

顺便说一句,你引用的这部分文字既笨拙又不准确:

实时(JIT)编译器是运行时解释器的一个特性。。。(上下文)

事实上,JIT不是解释器的特性。相反,JIT是与解释器一起工作的JVM的功能。

 类似资料:
  • 我试图理解Java源代码是如何执行的,我对JVM中的JIT编译器究竟是什么感到困惑。首先,让我告诉您我是如何理解从Java源代码到在计算机上执行机器代码的过程的。也许,我在这一过程中误解了一些导致混淆的东西。 步骤如下: 源代码被编译成字节码(.class文件) 现在,根据维基百科关于JVM的文章,更具体地说是“字节码解释器和实时编译器”部分,为了执行Java字节码,您需要一个解释器(但我们有一个

  • 所以我和一位面试官(你的标准人力资源经理)谈了他们在面试中真正想要的东西,他提到了一些关于测试JVM指令知识的东西(以及其他很多东西)。 我不知道那是什么,但我以为他说的是字节码指令。 我做了一些研究,似乎在“JVM指令”上找不到任何东西,我只找到了字节码指令的引用,我已经知道了字节码指令。 例如:http://docs.oracle.com/javase/specs/jvms/se7/html/

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

  • 我无法理解口译员和JIT之间的区别。例如,从这个答案中: JVMJava虚拟机-运行/解释/翻译字节码到本机代码 JIT是实时编译器——在运行时将给定的字节码指令序列编译为机器代码,然后在本地执行。它的主要目的是对性能进行重大优化。 两者都产生本机机器代码。然后,从另一个答案来看: 解释器为每条指令动态生成和执行机器代码指令,而不管之前是否执行过。JIT缓存以前已解释为机器代码的指令,并重用这些本

  • 问题内容: Sun的规范JVM实现对字节码进行了一些相当复杂的优化,以在代码运行几次后获得接近本机的执行速度。 问题是,为什么没有将此编译后的代码缓存到磁盘以供以后使用同一功能/类时使用? 就目前而言,每次执行程序时,JIT编译器都会重新启动,而不是使用代码的预编译版本。当本质上解释字节码时,是否添加此功能不会大大提高程序的初始运行时间? 问题答案: 我不求助于@MYYN发布的链接的’n’past

  • 问题内容: 看起来您可以用字节码做的任何事情,都可以像使用本机代码一样轻松快捷地完成。从理论上讲,您甚至可以通过以字节码分发程序和库,然后在安装时编译为本地代码,而不是JIT来保持平台和语言的独立性。 因此,通常来说,什么时候您要执行字节码而不是本机? 问题答案: SGI的Hank Shiffman说(很久以前,但这是事实): Java使用字节码而不是使用系统的本机代码具有三个优点: 可移植性 :