过去我使用C++作为编程语言。 我知道用C++编写的代码需要通过编译过程,才能成为目标文件 "机器码"。
我想了解Java在这方面的工作原理。 计算机如何运行用户编写的Java代码?
过去我使用C++作为编程语言。 我知道用C++编写的代码需要通过编译过程,才能成为目标文件 "机器码"。
我想了解Java在这方面的工作原理。 计算机如何运行用户编写的Java代码?
Java的实现通常使用两步编译过程。Java源代码由Java编译器编译成字节码。JVM执行字节码。现代JVM使用一种称为即时编译(JIT)的技术,在运行时动态地将字节码编译成硬件CPU可理解的本机指令。
JVM的一些实现可能选择解释字节码而不是JIT编译它到机器码并直接运行。虽然这仍然被认为是“解释器”,但它与读取和执行高级源代码的解释器(即在这种情况下,Java源代码不直接解释,而是Java编译器的输出字节码)非常不同。
从技术上讲,将Java编译为原生代码并运行生成的二进制文件是可能的。也可以直接解释Java代码。
总之,根据执行环境,字节码可以是:
Java编写的代码:
Java何时解释字节码,何时编译字节码?应用程序代码最初被解释,但JVM监视频繁执行的字节码序列并将其转换为机器码以直接在硬件上执行。对于仅执行几次的字节码,这样可以节省编译时间并减少初始延迟;对于频繁执行的字节码,则使用JIT编译以高速运行,在缓慢解释的初始阶段后。此外,由于程序大部分时间都在执行少数代码,因此减少的编译时间非常重要。最后,在初始代码解释期间,可以在编译之前收集执行统计信息,这有助于执行更好的优化。
Java代码会被编译为字节码,然后进入Java虚拟机进行解释执行。
Java是一种编译型编程语言,不过它并不会直接编译成可执行的机器码,而是编译成一个叫JVM字节码的中间二进制格式。这个字节码会被编译和/或解释来运行程序。
有点同时都是。首先,Java被编译(有些人更喜欢说“翻译”)为字节码,然后根据JIT的心情,它可能会被编译或解释。
Java既进行编译又进行解释。
在Java中,程序不会被编译成可执行文件。它们被编译成字节码(如前所述),然后由JVM(Java虚拟机)在运行时进行解释/执行。当我们使用javac编译器时,Java源代码会被编译成字节码。 字节码会以.class文件扩展名的形式保存在磁盘上。
当程序要运行时,使用即时(JIT)编译器可以将字节码转换为机器码。结果是将机器码馈送到内存并执行。
Javac是Java编译器,它将Java代码编译为字节码。 JVM是Java虚拟机,它将字节码转换为本地机器代码并运行/解释/翻译字节码。尽管Java被认为是一种解释型语言,但当字节码在JVM中时,它可以使用JIT(即时)编译。 JIT编译器动态读取字节码的许多部分(或全面,很少情况下),将其编译为机器代码,使程序能够更快地运行,然后缓存并在之后重复使用而无需重新编译。因此,JIT编译结合了编译代码的速度和解释性的灵活性。
解释型语言是一种编程语言,其大多数实现直接自由地执行指令,而不必事先将程序编译为机器语言指令。解释器会直接执行程序,将每个语句翻译为一个或多个已编译为机器码的子程序序列。
编译型语言是一种编程语言,其实现通常是编译器(从源代码生成机器代码的转换器),而不是解释器(按步骤执行源代码的执行器,在此过程中没有进行预运行时翻译)
在像Java这样的现代编程语言实现中,为平台提供两种选项变得越来越流行。
引用来源: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
应用程序开发人员可以在今天市场上提供的各种操作系统中开发应用程序代码。 Java语言在这个阶段对操作系统是不可知的。 Java应用程序开发人员编写的出色源代码现在被编译为Java字节码,这在Java术语中被称为客户端编译。 Java字节码的编译使Java开发人员能够“一次编写”。 Java字节码可以在任何兼容的操作系统和服务器上运行,因此使源代码不依赖于操作系统/服务器。创建Java字节码后,Java应用程序与底层操作系统/服务器之间的交互更加密切。旅程继续-企业应用程序框架在称为Java虚拟机(JVM)或Java运行时环境(JRE)的运行时环境中执行这些Java字节码。 JVM与底层操作系统和硬件有密切联系,因为它利用操作系统和服务器提供的资源。 Java字节码现在被编译为平台特定的机器语言可执行代码。这被称为服务器端编译。
因此我会说Java肯定是一种编译语言。
Java是一种字节编译语言,针对一个名为Java虚拟机的基于堆栈的平台进行编译,并在许多平台上具有一些非常快速的实现。