Java虚拟机(JVM):第一幕:起源,不一定全,但是一定靠谱

  在学习JVM之前,先分享一则信息:2009 年4月20日,Orace 宣布正式以74 亿美元的价格收购市值曾超过2000 亿美元的Sun公司,传奇的Sun Microsystems 从此落幕成为历史。

一、Java虚拟机的介绍

  首先登场的是,虚拟机的始组:Sun Classic / Exact VM,Sun Classic 被誉为世界上第一款商用Java虚拟机,只能使用纯解释器方式来执行,如果想要使用即时编译器则必须进行外挂,但是如果使用了外挂,那么解释器就不能工作了。

  所以,这个时候的Java语言很慢的印象,就在用户心中树立起来了。

  接下来,上场的是英雄气短的Exact VM,成名之作在于准确式内存管理,简单来说,就是虚拟机知道内存中某一个位置的数据具体是什么类型的。

  随之而来的是,武林盟主:HotSpot VM,是目前使用范围最广的Java虚拟机。就是这么一款吊炸天的虚拟机,是由一家小公司开发的。于是,在1997年,Sun公司,收购了Longview Technologies公司,从而获得了HotSpot虚拟机。名称中的HotSpot指的是:热点代码探测能力。可以通过执行计数器来找出最具有编译价值的代码,之后通知即时编译器以方法为单位进行编译。

  总的来说,只有编译器和解释器恰如其分的协同工作,可以在最优化的程序中,响应时间与最佳执行性能中取得平衡,而且无须等待本地代码的输出才能执行程序。

  江湖之间,并不只有打打杀杀,还有小家碧玉的虚拟机Mobile / Embedded VM,在嵌入式设备上,ME VM不仅面临外部忧患,而且还面临这自家SE Embedded的竞争和侵蚀。当然了,既然有武林盟主,当然还有长老、大师之类的角色。天下第二的BEA JRockit / IBM J9 VM 在历史上也存在着一定的地位。BEA公司的JRockit 可是号称“世界上速度最快的Java虚拟机”,BEA 将自家的JRockit虚拟机着重发展成为专门为服务器硬件和服务端应用场景高度优化的虚拟机,JRockit 内部不包含解释器的实现,全部代码都靠着即时编译器编译后执行。JRockit 的垃圾收集器也是处于Java虚拟机的领先水平。但是,随着BEA 公司被Oracle公司收购,版本永远停留在了R28。

  IBM J9虚拟机的定位,跟HotSpot差不多,在设计上全面考虑服务端、桌面应用,再到嵌入式的多用途虚拟机,J9的职责分离与模块化做的比HotSpot更加的优秀。

  当然了,除了平常运行的商业虚拟机,还有一些软硬件相结合工作的专有虚拟机,往往能够实现更高的执行性能,比如Liquid VM,它直接越过通用的操作系统去直接控制硬件,不需要进行内核态/用户态的切换,可以最大限度地发挥硬件的能力。Azul VM虚拟机提供了巨大内存范围内停顿时间可以控制的垃圾收集器(PGC和C4收集器),但是这个虚拟机是Azul公司在HotSpot虚拟机的基础上,进行大量改进得来的。Azul公司发布了自己的Zing虚拟机,Zing虚拟机的好处实在是太多了,可以让普通用户无须了解垃圾收集等底层调优,享有低延迟、快速预热、易于监控的功能。这可是Zing虚拟机的核心价值与卖点。

  有擂主就肯定有挑战者的存在,这里的挑战者是来自Apache的Harmony与Google  公司的Android Dalvik 虚拟机,但是这两个虚拟机不能被称为Java虚拟机。在虚拟机的海洋中,不仅仅只有商用虚拟机,还有一些设计之初就仅仅抱着研究、验证某种技术和观点。比如:KVM、Java Card VM、Squawk VM、JavaInJava、Maxine VM、Jikes RVM、IKVM.NET等等。   

posted @ 2023-06-21 12:53  我太想努力了  阅读(23)  评论(0编辑  收藏  举报