Sun Classic VM

        Classic VM是“世界上第一款商用Java虚拟机”;

        1996年1月23日,Sun公司发布JDK1.0,Java语言首次拥有了商用的正式运行环境,这个JDK中所带的虚拟机就是Classic VM。

        这款虚拟机只能使用纯解释器方式来执行Java代码,如果要使用JIT编译器(Just In Time 即时编译器),就必须进行外挂。但是假如外挂了JIT编译器,JIT编译器就完全接管了虚拟机的执行系统,解释器便不再工作了。

        由于解释器和编译器不能配合工作,就意味着如果要使用编译器执行,就不得不对每一个方法、每一行代码都进行编译,但在这个过程中,其实有些代码我们是用不到的,没有任何编译价值。编译的过程是在程序运行期,而不是在启动编译阶段,所以才说,基于程序响应时间的压力,编译器根本不敢应用编译耗时稍高的优化技术。

        因此,这个阶段的虚拟机及时使用了JIT编译器输出本地代码,执行效率也和传统的C/C++程序有很大差距,“Java语言很慢”的形象就是在这个时候开始在用户心中建立起来的。

        思考:编译器和解释器到底有什么区别?

        计算机只能理解二进制格式的机器语言;但是我们用自然编程语言(比如C,Java等)编写。因此必须有某种东西可以将这些编程指令转换为及其可理解的指令。这些就是编译器和解释器。两者都是出于相同的目的,但是在完成任务的方式上有所不同。

编译器 解释器
1)编译器将高级指令转换为机器可理解的指令。 1)解释器无需转换即可直接执行高级代码。
2)在执行之前,整个程序将由编译器执行。 2)解释器逐行执行。 因此,在翻译第一行之后,仅执行第二行,依此类推。
3)如果有任何编译器错误,它将一次显示整个程序的编译器错误。 第一行错误不会停止要在编译器中执行的程序。 3)如果有任何错误,一次仅显示一行错误。 并非一次都像编译器一样。 第n行中的错误将停止执行n + 1行。
4)编译后,将创建一个可执行文件。 将执行该程序以输出程序。 4)解释程序每次都需要口译员。
5)我们可以重复使用由编译器生成的目标代码(如.exe,a.out文件),而不必每次都执行原始程序。 除非我们要更改原始程序。 5)在解释器中,每当我们要输出程序时,都应执行整个原始程序。
6)编译需要更多的额外空间,因为将生成一个额外的可执行文件。 6)需要更少的内存空间。 因为不需要存储任何中间代码。
7)编译后的代码比原始代码运行得更快。 这种方式比使用解释器更快 7)没有中间代码生成/可执行文件。 每次必须执行整个程序。 因此,解释程序比编译程序慢。
8)将内存分配给变量并访问变量更快。 8)在解释器中对变量的访问也较慢,因为标识符到存储位置的映射必须在运行时而不是在编译时重复进行。
9)花费大量时间分析和处理程序。 9)花费相对较少的时间来分析和处理程序。
10)本机编译器,交叉编译器,源到源编译器,一遍编译器,增量编译器,源编译器是一些不同类型的编译器。 10)字节码解释器,线程代码解释器,抽象语法树解释器是某些类型的解释器。

上一篇:【转载】html中object标签详解


下一篇:iOS 两个应用之间的切换