Java字节码---解释执行

     Java安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。字节码是一套在Java运行时系统执行的高度优化的指令集,该Java运行时系统称为Java虚拟机(JavaVirtual Machine,JVM)。在其标准形式下,JVM 就是一个字节码解释器。这可能有点让人吃惊,因为出于对性能的考虑,大多数现代语言都被设计为编译型,而不是解释型。然而,正是通过JVM解释Java程序才有助于解决在Internet上下载程序的主要问题。这就是Java输出字节码的原因。

      将一个Java程序翻译成字节码,有助于更容易地在一个大范围的环境下运行程序。原因非常直接:只要在各种平台上都实现Java虚拟机就可以了。在一个给定的系统中,只要系统运行时包存在,任何Java程序就可以在该系统上运行。记住:尽管不同平台的Java虚拟机的细节有所不同,但它们都解释同样的Java字节码。如果一个Java程序被编译为本机代码,那么对于连接到Internet上的每一种CPU类型,都要有该程序的对应版本。这当然不是一个可行的解决方案。因此,通过JVM执行字节码是编写真正可移植性程序的最容易的方法。

       由JVM执行Java程序也有助于提高它的安全性。因为JVM控制Java程序的运行,所以它可以包含这个程序并且能阻止它在系统之外产生负作用。而Java语言某些限制增强了它的安全性。

       一般程序被编译为一种中间形式,然后由虚拟机解释执行时,其运行速度比将程序编译为可执行代码来运行要慢。但是对Java来说,这两者之间的差别不太大。由于已高度优化了字节码,所以使用字节码能够使JVM以比想象的快得多的速度执行程序。

       尽管Java最初被设计为解释,但是在技术上Java并不妨碍将字节码动态的编译为本机代码。在最初发布Java后不久,SUN公司提供了HotSpot技术。HotSpot有一个字节码编译器——JIT(Just In Time,即时)。JIT是Java虚拟机的一部分,它根据需要一部分一部分地将所选的字节码实时编译为可执行代码。但它不能将整个Java程序一次性全部编译为可执行的代码,因为Java要执行各种运行时检查,而这些检查只有在运行时才执行。记住这一点是很重要的,实际上,JIT编译器只编译运行时需要的代码。另外,JIT并非编译所有的字节码序列,而只是编译那些以后有用的字节码,对剩余代码仍只是进行解释。尽管如此,这种即时编译执行的方法仍然使性能得到较大提高。在对字节码进行动态编译后,Java程序的可移植性和安全性仍能得到保证,因为JVM仍然能够控制Java程序的执行环境。

你可能感兴趣的:(java)