java JVM 学习总结YZP专栏---历史上的Java虚拟机有哪些

本文回顾了Java虚拟机的发展历程,包括Sun Classic、ExactVM、HotSpot VM、Mobile/Embedded VM、BEA JRockit/IBM J9 VM、Azul VM等,重点介绍了各阶段的技术特点和应用场景。
摘要由CSDN通过智能技术生成
java JVM 学习总结YZP专栏—主目录—持续更新:https://blog.csdn.net/grd_java/article/details/123210715

1.1 虚拟机始祖:Sun Classic/Exact VM

Sun Classic
  1. 世界第一台商用Java虚拟机,1996年1月23日,Sun公司发布的JDK1.0所带的虚拟机就是Classic VM
  2. 只能使用纯解释器方式执行Java代码,想要及时编译器,必须进行外挂。但是一旦外挂了及时编译器,及时编译器就会完全接管虚拟机的执行系统,解释器无法继续工作。
  3. 外挂编译器为“sunwjit”(Sun Workshop JIT),一旦使用编译器,就会编译每一行代码,尽管有些代码没有编译的价值
  4. 为了保证程序响应时间,这些编译器不敢用优化技术(编译耗时会变高),因此,此阶段虚拟机虽然用了及时编译器输出本地代码,但是执行效率和C/C++有很大差距,当时的用户有了“Java语言很慢”的映像
  5. 最终JDK1.2时,Sun公司在Solaris平台发布Exact VM虚拟机,它的编译执行系统在当时就具备现代高性能虚拟机的雏形,例如热点探测、两级及时编译器、编译器和解释器混合工作模式等等。
Exact VM
  1. 使用准确式内存管理(Exact Memory Management),指虚拟机可以知道内存中某个位置数据具体什么类型。比如内存中有32bit的整数123456,可以准确分辨它是指向123456内存地址的引用,还是123456这个整数。
  2. 准确分辨哪些内存是引用类型,在垃圾回收时非常重要(堆上的数据是否还可能被使用)
  3. 抛弃了Classic VM基于句柄(Handle)的对象查找方式(垃圾收集后,对象可能需要移动位置,没有明确信息表明内存中哪些数据是引用类型时,虚拟机不敢移动,需要句柄来保存引用值的稳定),这样Exact VM每次定位对象都少了一次间接查找的开销,显著提升执行性能
  4. 但是还没来得及发布Windows和Linux平台的商用版,就被外部引进的HotSpot VM取代

1.2 武林盟主:HotSpot VM

发展
  1. JDK1.2时,与Classic VM并存,Classic VM是默认虚拟机,用户可以通过java-hotspot参数切换HotSpot VM虚拟机
  2. JDK1.3时,HotSpot VM为默认虚拟机,Classic VM为备用选择,通过java-classic参数切换
  3. JDK1.4及以后,Classic VM完全退出商用虚拟机的历史舞台
HotSpotVM
  1. 继承Sun之前两款商用虚拟机优点(准确式内存管理,和名字HotSpot相应的热点代码探测技术)
  2. 热点代码探测能力可以通过执行计数器找出最具编译价值的代码,然后通知及时编译器以方法为单位进行编译。如果一个方法频繁调用,或有效循环次数多,将分别触发标准即时编译和栈上替换编译
  3. 编译器和解释器恰当的协调工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,也就是半解释半编译,频繁执行的代码,进行编译执行,其余的直接解释执行略过编译时间。
  4. HotSpot是全世界使用最广泛的Java虚拟机。

1.3 小家碧玉:Mobile/Embedded VM

用武之地
  1. 前面介绍的是服务器、桌面领域的商用虚拟机
  2. 移动和嵌入式市场,也有专门的Java虚拟机产品,也就是JavaME这条产品线的虚拟机
  3. 基本快不行了,智能手机已被Android和iOS二分天下,嵌入式设备上又面临着自家Java SE Embedded(eJDK)的直接竞争和侵蚀
  4. 能用Java SE的 地方大家自然不愿意用Java ME
  5. Java SE Embedded里带的Java虚拟机当然还是HotSpot,但这是为了适应嵌入式环境专门定制裁剪的版本,尽可能在支持完整的Java SE功能的前提下向着减少内 存消耗的方向优化,譬如只留下了客户端编译器(C1),去掉了服务端编译器(C2);只保留 Serial/Serial Old垃圾收集器,去掉了其他收集器等
  6. 也就传音手机做的是功能机,销售市场主要在非洲,上面仍然用着Java ME的KVM

1.4 天下第二:BEA JRockit/IBM J9 VM

曾经与HotSpot并称“三大商业Java虚拟机”的另外两位:BEA System公司的JRockit与 IBM公司的IBM J9
  1. JRockit:专门为服务器硬件和服务端应用场景高度优化的虚拟机,不关注启动速度,不包含解释器,全部靠及时编译器编译后执行,随着BEA被Oracle收购,早已不在维护,永远停留在R28版本,也就是JDK6版的JRockit
  2. IBM J9,设计上全面考虑服务端、桌面应用、嵌入式的多用途虚拟机,职责分离和模块化做的比HotSpot更优秀,J9中抽象封装出来的核心组件库就单独构成了IBM OMR项目,可以在其他语言平台例如Ruby、Python中快速组装层相应功能。

1.5 软硬合璧:BEA Liquid VM/Azul VM

一类与特定硬件平台绑定、软硬件配合工作的专有虚拟机
  1. Liquid VM又称JRockit VE,BEA公司开发的可直接运行在自家Hypervisor系统上的JRockit虚拟机的虚拟化版,随着JRockit虚拟机终止开发,此项目也停止了。
  2. Azul VM,Azul System公司在HotSpot基础上大量改进的运行在公司专有硬件Vega系统上的Java虚拟机,2010年起,Azul公司重心转向软件,发布了Zing虚拟机,可以在x86平台上提供解决Vega系统的性能和一致的功能支持
Zing虚拟机
  1. HotSpot旧版代码分支基础上独立出来,重新开发的高性能Java虚拟机,可以运行在通用的Linux/x86-64平台上
  2. 低延迟、快速预热的场景中比HotSpot强,PGC和C4收集器可以轻松支持TB级别的Java堆内存,保证暂停时间仍然可以维持在不超过10ms的范围
  3. HotSpot到JDK11和JDK12的ZGC和Shenandoah收集器才达到相同目标,而且效果远不如C4

1.6 挑战者:Apache Harmony/Google Android Dalvik VM

都被淘汰了
  1. Apache Harmony:兼容与JDK5和JDK6的Java运行平台,含有自己的虚拟机和Java类库API,可以在上面运行Eclipse、Tomcat、Maven等常用Java程序,但是没通过TCK认证,不能用Apache的JDK或Apache的Java虚拟机来描述
  2. 许多代码(主要是Java类库的部分代码),被吸纳进IBM的JDK7实现以及Google Android SDK中,对Android的发展起到很大推动作用
  3. Google Android Dalvik VM:曾经Android平台核心组件之一,不是一个Java虚拟机,没有遵循《Java虚拟机规范》,不能直接执行Java的Class文件,使用寄存器架构而不是Java虚拟机中常见的栈架构。
  4. Android4.4时代,支持提前编译(AOT)的ART虚拟机迅速崛起,Android 5.0里,ART全面替代Dalvik虚拟机

1.7 Microsoft JVM及其他

Microsoft JVM虚拟机
  1. Java语言诞生初期(1996~1998年,以JDK1.2发布之前为分界),Java主要应用之一是浏览器中运行Java Applets程序,微软为了在Internet Explorer3浏览器中支持Java Applets应用而开发了自己的Java虚拟机,只有Windows平台版本,但是却是Windows系统下性能最好的Java虚拟机。
  2. 1997年10月,Sun公司正式以侵犯商标、不正当竞争等罪名控告微软,最终微软因垄断赔偿给Sun公司的总金额高达10亿美元。
  3. 后来在Windows XP SP3中Java虚拟机被完全抹去时,Sun公司又到此登报,希望微软不要这样做
其它虚拟机
  1. KVM中的K是“Kilobyte”的意思,它强调简单、轻量、高度可移植,但是运行速度比较慢。在 Android、iOS等智能手机操作系统出现前曾经在手机平台上得到非常广泛应用
  2. JCVM是Java虚拟机很小的一个子集,裁减了许多模块但通常支持绝大多数的常用加密算法。 JCVM必须精简到能放入智能卡、SIM卡、银行信用卡、借记卡内,负责对Java Applet程序进行解释执 行
  3. Squawk VM是由Sun开发,运行于Sun SPOT(Sun Small Programmable Object Tech-nology,一种手 持的Wi-Fi设备),也曾经运用于Java Card。这是一个Java代码比重很高的嵌入式虚拟机实现,其中诸 如类加载器、字节码验证器、垃圾收集器、解释器、编译器和线程调度都是用Java语言完成的,仅仅 靠C语言来编写设备I/O和必要的本地代码
  4. JavaInJava是Sun公司在1997年~1998年间所研发的一个实验室性质的虚拟机,从名字就可以看 出,它试图以Java语言来实现Java语言本身的运行环境
  5. Maxine VM和上面的JavaInJava非常相似,它也是一个几乎全部以Java代码实现(只有用于启动 Java虚拟机的加载器使用C语言编写)的元循环Java虚拟机。执行效率已经接近HotSpot虚拟机Client模式的水平。后来有 了从C1X编译器演进而来的Graal编译器的支持,就更加如虎添翼,执行效率有了进一步飞跃。Graal编 译器现在已经是HotSpot的默认组件,是未来代替HotSpot中服务端编译器的希望
  6. Jikes RVM是IBM开发的专门用来研究Java虚拟机实现技术的项目,与 JavaInJava和Maxine一样,它也是一个元循环虚拟机.
  7. 这是一个基于微软.NET框架实现的Java虚拟机,并借助Mono获得一定的跨平台能力
本文是我的JVM的学习笔记,可以当做复习和参考资料,如果想要真正学会,还是要去看书哦!我学习JVM的书籍如下
  1. 深入理解Java虚拟机:JVM高级特性与最佳实践(看完爆杀面试官)
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值