在过去,我已经使用C ++为编程语言。 我知道,用C ++编写的代码经过编译过程,直到它成为目标代码“机器代码”。
我想了解Java是如何工作的在这方面。 如何编写Java代码的用户通过计算机上运行?
在过去,我已经使用C ++为编程语言。 我知道,用C ++编写的代码经过编译过程,直到它成为目标代码“机器代码”。
我想了解Java是如何工作的在这方面。 如何编写Java代码的用户通过计算机上运行?
Java实现通常使用两个步骤的编译过程。 Java源代码是由Java编译器编译成字节码 。 字节码由Java虚拟机(JVM)执行。 现代JVM使用一种被称为刚刚在实时(JIT)编译编译字节代码由硬件CPU在运行时动态了解本地指令。
JVM的一些实现可以选择来解释字节码,而不是JIT编译它成机器代码,并直接运行它。 虽然这仍然被认为是一种“解释,”这是从读取和执行高级别源代码翻译完全不同的(即在这种情况下,Java源代码没有直接解释字节码,Java编译器的输出,是。)
这在技术上是可行编译Java到本机代码名列前茅的时间和运行所产生的二进制文件。 也可以直接解释的Java代码。
总之,取决于执行环境,字节码可以是:
用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
术语“解释语言”或“编译语言”是没有意义的,因为任何编程语言可以解释和/或编译。
至于爪哇现有的实现,大多数涉及编译步骤为字节码,因此它们涉及汇编。 运行时也可以动态加载的字节码,所以总是需要一些形式的字节码解释器的。 这个解释可能会或可能不会转而使用编译为本地代码在内部。
部分即时编译用于这曾一度被认为许多语言这些天来“解释”,例如使用Javascript。
Java的编译成字节码,然后进入Java虚拟机,这解释它。
这两个种类。 首先Java的编译(有些人喜欢说“翻译”)字节码,然后要么编译或解释取决于JIT的心情。
Java是编译的编程语言,但不是直接编译成可执行的机器代码,它编译成所谓的JVM字节代码的中间二进制形式。 然后字节代码被编译和/或解释来运行该程序。
Java那样了编译和解释,
在Java中, 程序不会被编译成可执行文件 ; 它们被编译成字节码 (如前面所讨论的),其JVM(Java虚拟机)然后解释/执行在运行时。 当我们使用javac编译Java源代码被编译成字节码。 字节码被保存为文件扩展名的.class在磁盘上 。
当程序要运行, 字节码被转换字节码可以被转换,使用刚刚在时间(JIT)编译器。 结果是机器代码,然后将其馈送到存储器并执行。
javac的是Java编译器来编译Java代码成字节码。 JVM是Java虚拟机它运行/解释/字节码转换成机器码。 在Java中,虽然它被认为是一种解释语言,它可以当字节码是在JVM使用JIT(刚刚在时间)汇编。 JIT编译器读取许多路段的字节码(或全部,很少)和动态编译它们成机器代码,以便程序可以运行得更快,然后缓存和重复使用后,无需重新编译。 所以JIT编译融合与演绎的灵活性编译代码的速度。
一个解释语言是一种类型,其大部分实施方式的直接和自由地执行指令,而无需先前编译程序成机器语言指令的编程语言。 解释器直接执行该程序,转换每个语句为一个或多个子程序的序列已经编译成机器代码。
甲编译语言是一种编程语言,其实现通常是编译器(翻译器,从源代码生成机器代码),而不是解释(步骤一步的源代码,其中没有运行时预翻译发生执行人)
在现代的编程语言实现比如在Java中,这是日益流行的平台,提供两种选择。
Java是一个字节编译语言定位一个叫做平台的Java虚拟机 ,其是基于栈并有许多平台上一些非常快速的实现。
从报价: https://blogs.oracle.com/ask-arun/entry/run_your_java_applications_faster
应用程序开发者可以在任何今天在市场上提供的各种操作系统的应用程序代码。 Java语言是在这个阶段的操作系统无关。 由Java应用程序开发者编写的辉煌的源代码现在被编译到在Java术语中被称为客户端编译Java字节码。 该汇编到Java字节码是什么使Java开发者“一次编写”。 Java字节码可以在任何兼容的操作系统和服务器上运行,从而使源代码无关的OS /服务器。 邮政Java字节代码创建,Java应用程序和底层的OS /服务器之间的交互更加亲密。 旅程继续 - 企业应用框架,被称为Java虚拟机(JVM)或Java运行时环境(JRE)运行时间环境中执行这些Java字节码。 JVM有密切联系的底层操作系统和硬件,因为它利用了由操作系统和服务器提供的资源。 Java字节码现在已被编译成机器语言的可执行代码是特定的平台。 这被称为服务器端编译。
所以,我要说的Java绝对是编译型语言。