Answers:
Java实现通常使用两步编译过程。Java编译器将Java源代码编译为字节码。字节码由Java虚拟机(JVM)执行。现代JVM使用称为即时(JIT)编译的技术将字节码编译为硬件CPU在运行时即时理解的本地指令。
JVM的某些实现可能选择解释字节码,而不是JIT将其编译为机器代码并直接运行。尽管它仍然被认为是“解释器”,但它与读取和执行高级源代码的解释器有很大不同(即,在这种情况下,不直接解释Java源代码,而对Java编译器的字节码进行直接解释。)
从技术上讲,可以提前将Java编译为本机代码并运行生成的二进制文件。也可以直接解释Java代码。
总而言之,根据执行环境的不同,字节码可以是:
用Java编写的代码是:
Java何时解释字节码,何时编译字节码?最初解释了应用程序代码,但是JVM监视哪些字节码序列经常执行,并将其转换为机器码以直接在硬件上执行。对于仅执行几次的字节码,可以节省编译时间并减少初始延迟。对于频繁执行的字节码,在缓慢解释的初始阶段之后,将使用JIT编译来高速运行。此外,由于程序会花费大部分时间执行少量代码,因此减少的编译时间非常重要。最后,在初始代码解释期间,可以在编译之前收集执行统计信息,这有助于执行更好的优化。
术语“解释语言”或“编译语言”没有意义,因为可以解释和/或编译任何编程语言。
对于Java的现有实现,大多数实现都涉及字节码的编译步骤,因此它们涉及编译。运行时还可以动态加载字节码,因此始终需要某种形式的字节码解释器。该解释器可能会也可能不会在内部使用对本机代码的编译。
如今,部分即时编译已用于许多曾经被视为“解释”的语言,例如JavaScript。
Java被编译为字节码,然后字节码进入Java VM,后者对其进行解释。
两者都有。首先,将Java编译(有些人希望说“翻译”)为字节码,然后根据JIT的心情对其进行编译或解释。
Java同时进行编译和解释,
在Java中,程序不会编译为可执行文件。它们被编译成字节码(如前所述),然后JVM(Java虚拟机)在运行时解释/执行字节码。当我们使用javac编译器时,Java源代码被编译为字节码。字节码以文件扩展名.class保存在磁盘上。
当程序要运行,字节码被转换的字节码可以被转换,使用刚刚在时间(JIT)编译器。结果是机器代码,然后将其馈送到内存并执行。
Javac是将Java代码编译为Bytecode 的Java编译器。JVM是Java虚拟机,它运行/解释/将字节码转换为本机代码。在Java中,尽管它被认为是一种解释语言,但当字节码位于JVM中时,它可能会使用JIT(即时)编译。JIT编译器读取很多部分(或很少见的完整部分)的字节码,并将它们动态地编译为机器代码,因此程序可以运行得更快,然后在以后进行缓存和重用而无需重新编译。因此,JIT编译将编译代码的速度与解释的灵活性结合在一起。
一个解释语言是一种类型的编程语言,其中大部分其实现方式的直接和自由地执行指令,而无需先前编译程序成机器语言指令。解释器直接执行程序,将每个语句转换为一个或多个已经编译为机器代码的子例程的序列。
甲编译语言是一种编程语言,其实现方式是通常的编译器(即从源代码生成机器代码转换器),而不是解释(步骤一步的源代码执行者,其中没有预运行时转换发生)
在像Java这样的现代编程语言实现中,提供这两种选择的平台越来越受欢迎。
Java是针对基于Java的Java虚拟机平台的字节编译语言,该平台基于堆栈,并且在许多平台上都有非常快速的实现。
引用来自:https : //blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
应用程序开发人员可以在当今市场上可用的各种OS上开发应用程序代码。在此阶段,Java语言与操作系统无关。由Java应用程序开发人员编写的出色的源代码现在被编译为Java字节码,在Java术语中称为客户端编译。这种对Java字节码的编译使Java开发人员能够“一次编写”。Java Byte代码可以在任何兼容的OS和服务器上运行,因此使源代码与OS / Server无关。创建Java字节代码后,Java应用程序与底层OS / Server之间的交互更加紧密。旅程继续进行-企业应用程序框架在称为Java虚拟机(JVM)或Java Runtime Environment(JRE)的运行时环境中执行这些Java Byte代码。JVM与底层操作系统和硬件紧密相连,因为它利用了操作系统和服务器提供的资源。现在,Java字节码已编译为特定于平台的机器语言可执行代码。这称为服务器端编译。
所以我想说Java绝对是一种编译语言。