字节码 与 java

java解决安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。

字节码是一套设计用来在于java运行时系统下执行的高度优化的指令集,该java运行时系统称为java虚拟机(JavaVirtual  Machine,JVM)。在其标准形式下,JVM就是一个字节码解释器。

像C++之类语言的编译结果是可执行的代码。事实上,出于对性能的考虑,许多现代语言都被设计为编译型,而不是解释型。

将一个Java程序翻译成字节码,有助于它更容易地在一个大范围的环境下运行程序。原因非常直接:只要在各种平台上都实现java虚拟机就可以了。在一个给定的系统中,只要系统运行包存在,任何java程序就可以在该系统上运行。尽管不同平台的java虚拟机的细节有所不同,但它们都节食同样的java字节码。因此,对字节码进行解释是编写真正可移植性程序的最容易的方法。

对Java程序进行解释也有助于它的安全性。因为每个java程序的运行都在Java虚拟机的控制下,Java虚拟机可以包含这个程序并阻止它在系统外产生副作用。

被解释的程序的运行速度通常会比同一个程序被编译为可执行代码的运行速度慢一些。但是对Java来说,这两者之间的差别不太大。使用字节码能够使Java运行时系统的程序执行速度比想象的快得多。

尽管Java被设计为解释执行的程序,但是在技术上Java并不妨碍动态将字节码编译为本机代码。SUN公司在Java2发行版中提供了一个字节码编译器JIT(just in time 即时)。JIT是Java虚拟机的一部分,它根据需要,一部分一部分的将字节码实时编译为可执行代码。它不能将整个Java程序一次性的全部编译为可执行的代码,因为Java要执行各种检查,而这些检查只有在运行时才执行。记住这一点是很重要的,因为JIT只编译它运行时需要的代码。尽管如此,这种即时编译执行的方法任然使性能得到较大的提高。即使对字节码进行动态编译后,java程序的可移植性和安全性仍能得到保证,因为运行时系统(该系统执行编译)仍然能够控制Java程序的运行环境。不管Java程序被按照传统方式解释为字节码,还是被动态编译为可执行代码,其功能是相同的

猜你喜欢

转载自blog.csdn.net/hello_world_1996/article/details/107400373
今日推荐