Java字节码解释器

时间:2011-07-15 15:27:43

标签: java

我知道首先编译java程序并生成与平台无关的字节码。但我的问题是为什么这个字节码在下一阶段被解释而不编译,即使编译比一般的解释更快?

5 个答案:

答案 0 :(得分:2)

你回答了自己的问题。字节代码与平台无关。如果编译的代码被执行,那么它将无法在每个操作系统上运行。这就是C的作用,这就是为什么你必须为每个操作系统都有一个版本。

正如其他人所建议的那样,JVM确实使用JIT编译代码。它只是没有保存在任何地方。这是一个很好的引用来总结它

  

在字节码编译系统中,源代码被转换为   称为字节码的中间表示。字节码不是   任何特定计算机的机器代码,并且可以是便携式的   计算机体系结构。然后可以通过或解释字节码   运行,虚拟机。 JIT编译器读取字节码   许多部分(或完全很少)并以交互方式编译它们   机器语言使程序运行得更快

答案 1 :(得分:1)

通常通过Just-In-Time (JIT) compilation编译 的Java字节码。

所以你最终仍然会执行完全编译的本机代码,唯一的区别是这个本机代码是由JVM在运行时生成的,而不是在编译源代码时静态生成的(如同C / C ++)。

这给Java带来了两大优势:

  • 通过将编译延迟到运行时,字节码在各个平台上保持完全可移植性
  • 在某些情况下,JIT编译器实际上可以生成更优化的本机代码,因为它能够通过在运行时检查代码的执行部分来利用收集的统计信息。

当然,缺点是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之外的一切。