当JIT也编译字节码时,为什么Java既是编译语言又是解释语言?

问题描述 投票:12回答:7

我读到这一点,一个java源代码被编译成'字节码',然后由JIT再次'编译'成'机器码'。也就是说,首先将源代码编译成与平台无关的字节码,然后再将其编译为特定于机器的代码。那为什么它被称为解释和编译语言?解释发生在哪里?

java jvm jit interpreted-language
7个回答
16
投票

这里有一点误会。

在正常情况下,java编译器(javac)将java代码编译为字节码,java解释器(java)解释这些字节码(逐行),将其转换为机器语言并执行。

JIT(Just in time)编译器有点不同的概念。 JVM维护函数执行的次数。如果超过限制,那么JIT就会出现。 java代码直接编译成机器语言,用于执行该函数。


9
投票

Java是一种编程语言。

它有一个规范(JLS),定义了Java程序应该如何操作。

作为一种语言本身,它没有指定如何在不同平台上执行它。它使用JIT或没有JIT运行的方式完全基于实现。

  • 如果我明天写一个不运行JIT编译的Java运行库,我可以调用Java解释。
  • 如果我使用Java字节码作为汇编的Java机器(and people seriously made those),我可以调用严格编译的Java。

许多其他语言都这样做:

  • python是一种解释语言吗? (CPython)还是JITed(PyPy)?
  • Lua是解释(旧的lua解释器)还是编译(LuaJIT)?
  • 是JavaScript解释(IE6风格)还是编译(v8)?

3
投票

为了精确起见,让我们明确这不是Java编程语言问题,而是JVM功能。

在JVM的第一个实现中,JIT不存在,并且始终解释字节码。这是由于设计决定使编译代码独立于运行java的物理机器和操作系统,并且今天仍然有效。

作为后来的改进,JIT在JVM实现中被引入以便更快地执行,但字节码必须仍然有效并在转换为二进制之前传递所有验证。这样,您可以保持平台独立性,所有健全性和安全性检查,并获得性能。


1
投票

javac是一个编译器,它将java代码转换为字节码(参见字节码),如果我们有一个JVM(java虚拟机),它很容易在任何机器上运行。和解释器将java字节码转换为机器码。


1
投票

Java是混合语言,即它既是Compiled(先前完成的工作)又是Interpreted(完成接收端的工作)。

字节代码是Java的IL(中间语言)。 Java源代码由javac编译为Bytecode。有时,这个字节代码再次编译成Machine语言,称为JIT(Just-In-Time)编译。

JIT编译是一种执行计算机代码的方法,它涉及程序执行期间的编译 - 在运行时 - 而不是在执行之前。 source

JVM(不带JIT)将java中间语言字节代码解释为本机机器语言,如下所示:

enter image description here

Source

JVM是一个抽象的计算机器,它有几个实现:

  • HotSpot(Interpreter + JIT编译器):主要参考Java VM实现。由Oracle Java和OpenJDK使用。
  • JamVM(解释器)与其他人相比,开发成为一个非常小的虚拟机。旨在使用GNU Classpath。支持多种架构。 GPL。
  • ART(解释器+ AOT编译器,即提前编译)Android RunTime是Android操作系统使用的应用程序运行时环境,取代了Dalvik(解释器+ JIT编译器)。

List of Java virtual machines


0
投票

它有两个目的。第一个是确保代码在语法和语义上都是正确的。其次,编译过程产生字节码。如您所知,这是一种与体系结构无关的中间语言,可以由JVM针对特定的机器体系结构进行解释或即时编译为本机代码。通过编译为字节代码,可以提前完成与编译相关的大部分开销,使JVM从中生成本机代码或解释事先经过彻底和严格检查的字节代码。


0
投票

与其他编程语言不同,java是编译和解释语言。 Java IDE充当编译器,JVM(java虚拟机)的行为类似于解释器。即当任何程序说Hello时,在编译为Hello.java后保存,编译完这个文件后我们得到Hello.Class扩展文件,称为类文件,字节码或中间代码。字节代码不依赖于任何特定的机器,因此它也被称为中间代码。要将此字节代码转换为机器代码或机器可理解的格式,使用的JVM对于不同的操作系统是不同的。 JIT(即时编译器)是JVM的一部分,默认情况下启用将字节码编译为“及时”编译的本机机器代码。

© www.soinside.com 2019 - 2024. All rights reserved.