我知道首先编译java程序并生成与平台无关的字节码。但我的问题是为什么这个字节码在下一阶段被解释而不编译,即使编译比一般的解释更快?
答案 0 :(得分:2)
你回答了自己的问题。字节代码与平台无关。如果编译的代码被执行,那么它将无法在每个操作系统上运行。这就是C的作用,这就是为什么你必须为每个操作系统都有一个版本。
正如其他人所建议的那样,JVM确实使用JIT编译代码。它只是没有保存在任何地方。这是一个很好的引用来总结它
在字节码编译系统中,源代码被转换为 称为字节码的中间表示。字节码不是 任何特定计算机的机器代码,并且可以是便携式的 计算机体系结构。然后可以通过或解释字节码 运行,虚拟机。 JIT编译器读取字节码 许多部分(或完全很少)并以交互方式编译它们 机器语言使程序运行得更快
答案 1 :(得分:1)
通常通过Just-In-Time (JIT) compilation编译 的Java字节码。
所以你最终仍然会执行完全编译的本机代码,唯一的区别是这个本机代码是由JVM在运行时生成的,而不是在编译源代码时静态生成的(如同C / C ++)。
这给Java带来了两大优势:
当然,缺点是JIT编译器需要在应用程序启动时完成它,这解释了为什么JVM应用程序与本机编译的应用程序相比可能具有稍长的启动时间。
答案 2 :(得分:0)
JVM使用及时编译 http://en.wikipedia.org/wiki/Just-in-time_compilation,因此它比纯解释快得多。
答案 3 :(得分:0)
你的问题的基本前提是不正确的。大多数现代Java虚拟机都会将经常执行的代码部分编译为本机机器代码。
这被称为just-in-time compilation,简称为JIT。
可以找到相关Sun(现在的甲骨文)技术的相当好的介绍here。
答案 4 :(得分:0)
字节代码与平台无关。一旦编译成字节码,它就可以在任何系统上运行。
正如维基百科上所说,
Just-in-time compilation (JIT)
,也称为动态翻译,是 一种提高计算机程序运行时性能的方法。
我建议你阅读这篇文章。它为Java VM提供basic working of JIT compiler
。
JIT编译器通过直接编译来稍微改变VM的角色 将Java字节码转换为本机平台代码,从而缓解了VM 需要手动调用底层本机系统服务。该 然而,JIT编译器的目的不是让VM放松。通过 将字节码编译成本机代码,执行速度可以大大提高 改进,因为本机代码可以直接在上面执行 基础平台。
安装JIT编译器时,而不是调用VM 底层本机操作系统,它调用JIT编译器。 JIT 编译器反过来生成可以传递给的本机代码 用于执行的本机操作系统。这样做的主要好处 安排是JIT编译器完全透明 除VM之外的一切。