2019年春阅读笔记2——JAVA虚拟机的发展史
Sun Classic VM
1996年1月23日Sun公司发布了JDK1.0,并推出了世界上第一款商用Java虚拟机---Sun Classic VM。不过,该款虚拟机只能使用纯解释器的方式来执行Java代码,如果需要使用JIT(即时编译器Just In Time Compiler),就必须进行外挂操作。但是,如果外挂了JIT(即时编译器Just In Time Compiler),解释器就不会在起作用了,JIT(即时编译器Just In Time Compiler)会完全接管了虚拟机的执行。 悲剧的是,如果JIT(即时编译器Just In Time Compiler)完全接管了虚拟机,将会导致整个Java程序的执行效率大大降低。
Exact VM
Sun Classic VM的诞生,为Java提供了更为广阔的发展空间,但是Sun Classic VM也存在这致命的缺陷。
为了解决Sun Classic VM所面临的效率问题,Sun公司在Java1.2时候发布了名为Exact VM的虚拟机,这款虚拟机的执行系统采用的是两级即时编译器、编译器和解释器混合工作模式等,同时Exact VM采用准确式内存管理,也就是说虚拟机知道内存中的某个位置上的数据是什么类型的,例如说:这个位置是一个数字123的reference类型,还是就是数字123。有了这样的功能后,虚拟机在垃圾收集时就可以准确的判断出这些数据是否可用,继而大大提高了垃圾回收的效率。
虽然Exact VM在技术上比Sun Classic VM先进了许多,但不幸的是,没诞生多久就被后来更为优秀的HotSpot VM所取代,早早夭折了。甚至还没有发布windows和linux平台下的商用版本。
Sun HotSpot VM
HotSpot VM最初并非Sun公司开发的,而是由一家名为“Longview Technologies”的小公司设计的,而且这款虚拟机一开始也不是为Java语言开发的。
不过,在当时HotSpot VM这款虚拟机在JIT编译技术上拥有许多优秀的理念,于是Sun公司在1997年收购了Longview Technologies,并获得了HotSpot VM。
正所谓人如其名,Sun HotSpot VM不但继承了之前两款Sun Classic VM、Exact VM虚拟机的特点,还有很多自己的特征。通过名字便可看出,HotSpot--热点,即热点代码探测技术。
2006年,JavaOne大会,Sun公司宣布将Java进行开源,并在GPL协议下公开了源码,在此基础上建立了OpenJDK(大部分内容与Sun Java一致)。而Sun HotSpot VM也就成为了Sun JDK 和 OpenJDK的公共虚拟机。
在Java1.3时,HotSpot VM成为了Java默认的虚拟机(不幸的Exact VM早已被打入冷宫,据说在Sun公司内部还进行了激烈的讨论,到底是选择HotSpot VM还是Exact VM)。有趣的是,第一代商用虚拟机Classic VM在Java1.0、Java1.1、Java1.2时仍是首选默认,在Java1.3时成为了HotSpot VM的备份,直到Java1.4时完全退出虚拟机的历史舞台。
BEA JRockit
BEA JRockit曾号称是“世界上速度最快的Java虚拟机”,是BEA公司在2002年从Appeal Virtual Machines公司收购得来的。有意思的是,Oracle后面又把BEA公司收购了。所以JRockit现在隶属于Oracle;
说到BEA大家可能不太熟悉,但是如果问到weblogic,想必许多人都听说过。没错,weblogic就是BEA公司的一个重量级产品,与tomcat一样,也是一个开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。最早由一个小公司开发,后来被BEA公司收购。
与其他的虚拟机不同的是,BEA JRockit旨在驱动要求极高的服务器端Java应用,以便为企业应用提供极高的性能、可管理性和可靠性。
在BEA收购JRockit之后,BEA公司将其发展成一款专门为服务器硬件和服务器端应用场景高度优化的虚拟机,说直白点,就是该虚拟机对于特定场景的应用更合适,例如高并发,进行了一些深度的优化操作,执行速度上远远超过HotSpot VM.
不幸的是,由于Oracle后面即收购了BEA公司,也收购了Sun公司,所以在Java SE虚拟机的选择上,BEA也成为了炮灰,只有HotSpot VM一家独大了。JRockit最后发布的大版本是R28,只支持到了Java1.6,原本在开发中的R29及JDK7的对应功能都没来得及完成项目就被终止了。
IBM J9 VM
IBM最初研发了多款Java虚拟机,不幸的是,经过多年的发展,许多虚拟机不是被合并就是被淘汰了。现在主推的就是我们本小节要介绍的IBM J9虚拟机。
IBM J9是IBM开发的一个高度模块化的JVM。
与JRockit不同,IBM J9的市场定位与Sun HotSpot VM类似,是一款从服务器端到桌面应用再到嵌入式等场景都涉及的虚拟机,但是,在中国IBM J9的普及程度远不及HotSpot 或JRockit。
由于IBM自身发展问题,IBM J9至今连一份完整的中文文档都很难找到。关于IBM J9的大部分信息,很多都是在其IBM内部平台上进行共享,直接对外公布的相对较少。
Azul VM
Azul VM是Azul System公司在Sun HotSpot VM基础上进行大量改进后的产品,运行在Azul System公司专有Vega平台上。Vega是Azul System公司主打的硬件/软件的混合解决方案。Vega中使用的是自行设计的Vega/TXU CPU,定制的内存和主板,自行研发的操作系统,所以说是一个软硬结合的混合解决方案。
重要的是,每个Azul VM可以管理数十个CPU和数百GB内存的硬件资源,可不可怕。更为关键的是,在如此大的内存下,Azul VM还能可控的GC时间的垃圾收集器。
Vega于2005年首次投向市场。到2009服务器硬件市场疲软后,Azul转向研发Azul Zing虚拟机,于2010年发布,而Vega硬件设计部门最终就解散了