Java是编译的还是解释的编程语言?

在过去,我使用C ++作为编程语言。 我知道使用C ++编写的代码需要经过一个编译过程,直到它成为目标代码“机器代码”。

我想知道Java在这方面是如何工作的。 用户如何编写由计算机运行的Java代码?

Java实现通常使用两步编译过程。 Java源代码由Java编译器编译为字节码 。 字节码由Java虚拟机(JVM)执行。 现代JVM使用称为即时(Just-in-Time,JIT)编译的技术将字节码编译为硬件CPU在运行时可以理解的本地指令。

JVM的某些实现可以select解释字节码,而不是JIT将其编译为机器码,并直接运行。 虽然这仍然被认为是“解释器”,但与读取和执行高级源代码的解释器完全不同(即,在这种情况下,Java源代码不是直接解释的,Java编译器的字节码是输出)。

在技​​术上可以提前将Java编译成本地代码并运行生成的二进制文件。 也可以直接解释Java代码。

总而言之,取决于执行环境,字节码可以是:

  • 提前编译并作为本地代码执行(类似于大多数C ++编译器)
  • 及时编译并执行
  • 解读
  • 直接由支持的处理器执行(字节码是一些CPU的本地指令集)

术语“解释型语言”或“编译型语言”是没有意义的,因为任何编程语言都可以被解释和/或编译。

至于Java的现有实现,大部分涉及到字节码的编译步骤,所以涉及编译。 运行时也可以dynamic加载字节码,所以总是需要某种forms的字节码解释器。 该解释器可能会或可能不会在内部使用编译本地代码。

现在,部分即时编译被用于曾经被认为是“解释”的许多语言,例如Javascript。

Java被编译成字节码,然后进入解释它的Java VM。

[ 1 ]下面的图片解释了这一切…

在这里输入图像描述

用Java编写的代码是:

  • 首先通过一个名为javac的程序编译成字节码,如上图左侧部分所示;
  • 然后,如上图中右侧所示, [ 2 ]另一个称为java的程序启动Java运行时环境,它可以使用Java解释器/ JIT编译器编译和/或解释字节码。

什么时候java解释字节码,什么时候编译它? [ 3 ]应用程序代码最初是被解释的,但JVM监视哪些字节代码序列经常被执行,并将它们转换成机器代码,以便在硬件上直接执行。 对于仅执行几次的字节码,这节省了编译时间并减less了初始等待时间; 对于频繁执行的字节码,在慢速解释的初始阶段之后,JIT编译被用于高速运行。 此外,由于程序花费大部分时间来执行其less数代码,所以编译时间缩短很多。 最后,在最初的代码解释过程中,可以在编译之前收集执行统计数据,这有助于执行更好的优化。


点击答案中的上标数字以供参考。

两种。 首先,Java编译(有些人更喜欢说“翻译”)字节码,然后编译,或解释取决于JIT的心情。

Java是一种编译的编程语言,而不是直接编译为可执行的机器代码,而是编译成称为JVM字节码的中间二进制forms。 字节码然后被编译和/或解释来运行程序。

Java是一种字节编译语言,面向称为Java虚拟机的平台,它基于堆栈,在许多平台上具有一些非常快速的实现。

引用来自: https : //blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster

应用程序开发人员可以在当今市场上可用的各种操作系统上开发应用程序代码。 Java语言在这个阶段对操作系统是不可知的。 Java应用程序开发人员编写的精彩源代码现在被编译为Java字节代码,在Java术语中称为客户端编译。 这种编译成Java Byte代码是Java开发人员可以“一次编写”的东西。 Java字节码可以在任何兼容的操作系统和服务器上运行,从而使源代码不受OS / Server的影响。 发布Java字节代码创build,Java应用程序和底层OS / Server之间的交互更加亲密。 这个过程将继续 – 企业应用程序框架在称为Java虚拟机(JVM)或Java运行时环境(JRE)的运行时环境中执行这些Java字节代码。 JVM与底层操作系统和硬件紧密相关,因为它利用了操作系统和服务器提供的资源。 Java字节代码现在被编译为特定于平台的机器语言可执行代码。 这被称为服务器端编译。

所以我会说Java绝对是一种编译语言。