常见的Java虚拟机有:1、Oracle的HotSpot虚拟机;2、BEA System的JRockit虚拟机;3、IBM公司的J9虚拟机。Oracle的HotSpot虚拟机,BEA System的JRockit虚拟机以及IBM公司的J9虚拟机,并称“三大商业Java虚拟机”。
一、Oracle的HotSpot虚拟机
提起 HotSpot VM,相信所有Java程序员都知道,它是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的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 VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利),HotSpot VM的热点代码探测能力可以通过执行计数器找出具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在优异化的程序响应时间与优异执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。
在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优异的Java虚拟机:JRockit VM和HotSpot VM。Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。整合的方式大致上是在HotSpot的基础上,移植JRockit的优异特性,譬如使用JRockit的垃圾回收器与MissionControl服务,使用HotSpot的JIT编译器与混合的运行时系统。
二、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 力发展无就J9。J9 这个名字最初只是内部开发代号而己,开始选定的正式名称是“IBM Technology fotJava Virtual Machine”,简称T4J,但这个名字太扬口,接受度远不 J9。J9 虚拟机最初是由IBM Otawa 实验室的一个 SmalTalk 虚机项目扩展而来,当时这个虚拟机有一个Bug是因为8KB常量值定义错误引起,工程师们花了很长时间终于发现并解决了这个错误,此后这个版本的虚拟机就被称为 K8,后来由其扩展而来、支持 Java 语言的虚拟机就被命名为J9。与BEA JRockit 只专注于服务端应用不同,IBM J9虚拟机的市场定位与HotSpot 比较接近,它是一款在设计上全面考虑服务端、桌面应用,再到嵌人式的多用途虚拟机,开发J9的目的是作为IBM公司各种Java 产品的执行平台,在和IBM产品(如IBM WebSphere 等)搭配以及在IBMAIX和Z/OS这些平台上部Java应用。
IBM J9直至今天仍旧非常活跃,IBM J9 虚拟机的职责分离与模块化做得比HotSpot 更优异,由J9虚拟机中抽象封装出来的核心组件库(包括垃圾收集器、即时编译器、诊断监控子系统等)就单独构成了IBM OMR项目,可以在其他语言平台如 Ruby、Python 中快速组装成相应的功能。从2016年起,IBM逐步将OMR项目和J9 虚拟机进行开源,完全开源后便将它们捐献给了Eclipse 基金会管理,并重新命名为 Eclipse OMR和OpenJ9。如果为了学习虚拟机技术而去阅读源码,更加模块化的OpenJ9代码其实是比HotSpot 更好的选择。如果为了使用Java虚拟机时多一种选择,那可以通过AdoptOpenJDK来获得采用OpenJ9搭配上OpenJDK其他类库组成的完整JDK。
除 BEA 和IBM公司外,其他一些大公司也号称有自己的专属JDK 和虚拟机,但是它们要么是通过从 Sun/Oracle 公司购买版权的方式获得的(如HP、SAP等),要么是基于OpenJDK项目改进而来的(如阿里巴巴、Twitter 等),都并非自己独立开发。
来源:本文为CSDN博主「No8g攻城狮」的原创文章
原文链接:https://blog.csdn.net/weixin_44299027/article/details/128154827
延伸阅读
什么是java虚拟机
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 具吸引力的特性之一。
文章标题:目前主流的Java虚拟机有哪些,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37536