144 java compilation interpretation
在过去,我使用C++作为编程语言.我知道用C++编写的代码经过编译过程,直到它成为目标代码"机器代码".
我想知道Java在这方面是如何工作的.用户如何编写由计算机运行的Java代码?
Meh*_*ari 200
Java实现通常使用两步编译过程.Java编译器将Java源代码编译为字节码.字节码由Java虚拟机(JVM)执行.现代JVM使用称为即时(JIT)编译的技术将字节码编译为硬件CPU在运行时即时理解的本机指令.
JVM的某些实现可能会选择解释字节码而不是JIT将其编译为机器代码,并直接运行它.虽然这仍然被认为是"解释器",但它与读取和执行高级源代码的解释器完全不同(即在这种情况下,Java源代码不直接解释,字节码,Java编译器的输出,是.)
从技术上讲,可以提前将Java编译为本机代码并运行生成的二进制文件.也可以直接解释Java代码.
总而言之,根据执行环境,字节码可以是:
dis*_*ame 76
用Java编写的代码是:
java何时解释字节码以及何时编译它?最初解释应用程序代码,但JVM监视频繁执行的字节码序列,并将它们转换为机器代码,以便在硬件上直接执行.对于仅执行几次的字节码,这节省了编译时间并减少了初始延迟; 对于频繁执行的字节码,在慢速解释的初始阶段之后,JIT编译用于高速运行.此外,由于程序花费大部分时间执行其少量代码,因此缩短的编译时间非常重要.最后,在初始代码解释期间,可以在编译之前收集执行统计信息,这有助于执行更好的优化.
参考文献:
1:http://techwelkin.com/compiler-vs-interpreter
2:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
3:https://en.wikipedia.org/wiki/Just-in-time_compilation#Startup_delay_and_optimizations
sta*_*lue 55
术语"解释语言"或"编译语言"没有意义,因为任何编程语言都可以被解释和/或编译.
至于Java的现有实现,大多数涉及到字节码的编译步骤,因此它们涉及编译.运行时也可以动态加载字节码,因此总是需要某种形式的字节码解释器.该解释器可能会或可能不会在内部使用编译到本机代码.
目前,部分即时编译用于许多曾被认为是"解释"的语言,例如Javascript.
Noo*_*ilk 51
Java被编译为字节码,然后进入Java VM,它解释它.
may*_*eye 11
两种都有.首先java编译(有些人更喜欢说"翻译")到字节码,然后根据JIT的情绪编译或解释.
Java同时进行编译和解释,
在 Java 中,程序不会被编译成可执行文件;它们被编译成字节码(如前所述),然后由 JVM(Java 虚拟机)在运行时解释/执行。当我们使用 javac 编译器时,Java 源代码被编译成字节码。字节码以文件扩展名 .class 保存在磁盘上。
当程序要运行时,字节码被转换,字节码可以被转换,使用即时(JIT)编译器。结果是机器代码,然后将其送入内存并执行。
Javac是Java Compiler,它将 Java 代码编译成字节码。JVM 是 Java 虚拟机,它运行/解释/将字节码转换为本地机器代码。在 Java 中,虽然它被认为是一种解释型语言,但当字节码在 JVM 中时,它可能会使用 JIT(即时)编译。JIT 编译器读取许多部分(或完整,很少)中的字节码,并将它们动态编译成机器码,以便程序可以更快地运行,然后缓存并在以后重用,而无需重新编译。所以 JIT 编译结合了编译代码的速度和解释的灵活性。
一个解释语言是一种类型的编程语言,其中大部分其实现方式的直接和自由地执行指令,而无需先前编译程序成机器语言指令。解释器直接执行程序,将每条语句翻译成一系列已经编译成机器码的一个或多个子程序。
甲编译语言是一种编程语言,其实现方式是通常的编译器(即从源代码生成机器代码转换器),而不是解释(步骤一步的源代码执行者,其中没有预运行时转换发生)
在像 Java 这样的现代编程语言实现中,提供这两种选择的平台越来越受欢迎。
归档时间: |
|
查看次数: |
160350 次 |
最近记录: |