【JVM】jvm虚拟机都有哪些?常用jvm虚拟机简介

一、Java虚拟机

以下介绍三种常见的Java虚拟机,当然世界上还有其他很多,在这里不一一介绍,如果感兴趣的话,可以自行百度。

  1. OracleHotSpot虚拟机;
  2. BEA SystemJRockit虚拟机;
  3. IBM公司的J9虚拟机;

Oracle的HotSpot虚拟机,BEA System的JRockit虚拟机以及IBM公司的J9虚拟机,并称“三大商业Java虚拟机”。

二、Oracle的HotSpot虚拟机

提起 HotSpot VM,相信所有Java程序员都知道,它是 Sun JDKOpenJDK 中所带的虚拟机,也是目前使用范围最广的Java虚拟机。但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM

HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势,如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,而Exact VM之中也有与HotSpot几乎一样的热点探测。为了Exact VMHotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利),HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。

在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDKOpenJDK两个实现极度接近的JDK项目的共同虚拟机。

在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VMHotSpot VMOracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务,使用HotSpotJIT编译器与混合的运行时系统。

三、JRockit虚拟机

JRockit 虚拟机曾经号称是“世界上速度最快的Java 虚拟机”(广告词,IBMJ9虚拟机也这样宣传过,总体上三大虚拟机的性能是交替上升的),它是BEA在2002年从AppealVirtual Machines 公司收购获得的Java 虚拟机。BEA将其发展为一款专门为服务器硬件和服务端应用场景高度优化的虚拟机,由于专注于服务端应用,它可以不太关注于程序启动速度,因此JRockit 内部不包含解释器实现,全部代码都靠即时编译器编译后执行。

一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案。 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM。JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒级的JVM响应时间,适合财务前端办公军事指挥与控制电信网络的需要。使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70% )和硬件成本的减少(达50%)。

四、J9虚拟机

IBM J9 虚拟机并不是 IBM 公司唯一的 Java 虚拟机,不过目前IBM 力发展无就J9J9 这个名字最初只是内部开发代号而己,开始选定的正式名称是“IBM Technology fotJava Virtual Machine”,简称T4J,但这个名字太扬口,接受度远不 J9J9 虚拟机最初是由IBM Otawa 实验室的一个 SmalTalk 虚机项目扩展而来,当时这个虚拟机有一个Bug是因为8KB常量值定义错误引起,工程师们花了很长时间终于发现并解决了这个错误,此后这个版本的虚拟机就被称为 K8,后来由其扩展而来、支持 Java 语言的虚拟机就被命名为J9。与BEA JRockit 只专注于服务端应用不同,IBM J9虚拟机的市场定位与HotSpot 比较接近,它是一款在设计上全面考虑服务端、桌面应用,再到嵌人式的多用途虚拟机,开发J9的目的是作为IBM公司各种Java 产品的执行平台,在和IBM产品(如IBM WebSphere 等)搭配以及在IBMAIXZ/OS这些平台上部Java应用。

IBM J9直至今天仍旧非常活跃,IBM J9 虚拟机的职责分离与模块化做得比HotSpot 更优秀,由J9虚拟机中抽象封装出来的核心组件库(包括垃圾收集器、即时编译器、诊断监控子系统等)就单独构成了IBM OMR项目,可以在其他语言平台如 Ruby、Python 中快速组装成相应的功能。从2016年起,IBM逐步将OMR项目和J9 虚拟机进行开源,完全开源后便将它们捐献给了Eclipse 基金会管理,并重新命名为 Eclipse OMROpenJ9。如果为了学习虚拟机技术而去阅读源码,更加模块化的OpenJ9代码其实是比HotSpot 更好的选择。如果为了使用Java虚拟机时多一种选择,那可以通过AdoptOpenJDK来获得采用OpenJ9搭配上OpenJDK其他类库组成的完整JDK

BEAIBM公司外,其他一些大公司也号称有自己的专属JDK 和虚拟机,但是它们要么是通过从 Sun/Oracle 公司购买版权的方式获得的(如HPSAP等),要么是基于OpenJDK项目改进而来的(如阿里巴巴、Twitter 等),都并非自己独立开发。

五、Java虚拟机拓展

1. 虚拟机始祖:Sun Classic / Exact VM
2. 武林盟主:HotSpot VM
3. 小家碧玉:Mobile / Embedded VM
4. 天下第二:BEA JRockit / IBM J9 VM
5. 软硬合璧:BEA Liquid VM / Azul VM
6. 挑战者:Apache Harmony / Google Android Dalvik VM
7. 没有成功,但并非失败:Microsoft JVM及其他
8. 百家争鸣(KVM、Java Card VM、Squawk VM、JavaInJava、Maxine VM、Jikes RVM\IK VM.NET、JamVM、CacaoVM、SableVM、Kaffe、Jelatine JVM、NanoVM、MRP、Moxie JVM)

以上Java虚拟机拓展内容引自《深入理解Java虚拟机-JVM高级特性与最佳实践》一书。

猜你喜欢

转载自blog.csdn.net/weixin_44299027/article/details/128154827
今日推荐