深入理解JVM虚拟机 - 虚拟机的发展历史
内容基本来自《深入理解JVM虚拟机》。算是对于发展历史的一点个人总结。
概述:
- JVM的发展历史以及历史进程
- Hotspot为什么可以称霸武林
- Hotspot和JRocket 合并,结果喜忧参半
- jvm面临的挑战以及未来的发展前瞻
思维导图:
虚拟机发展历史
classic VM - 第一台正式商用JAVA虚拟机
于1996年1月23日Sun发布jdk1.0诞生,是JAVA真正意义上第一台JVM虚拟机
特点:
- 只支持纯解释器运行
- 条件编译智能用外挂(Sun wjit)。解释器和编译器不能配合工作。
- 内部工作原理十分简单
意义:
- jdk1.2之前唯一指定虚拟机
- jdk1.2 存在hotspot和exact vm 混合的情况
媲美hotspot的虚拟机:Exact Vm
特点:
- 准确的内存管理(可以知道那一块内存的精确数据类型)。抛弃基于句柄的对象查找方式
- 热点探测,两级即时编译,编译和解释混合
意义:
- 由于更优秀的HotSpot虚拟机出现,没有被正式商用,存在时间十分短暂
- jdk1.2时,sun提供了此虚拟机配合classic使用
武林霸主:hotspot Vm
特点:
- 具备exact vm虚拟机的所有特性
- 支持热点代码探索
- 精确的内存管理
- 高频代码的标准即使编译和栈上替换(重要)
意义:
- HotRocket:jdk8的Hotspot和JRocket进行合并
- 实际效果并不好,JRocket的很多特性没有发挥出来。
手机端虚拟机:Embeded vm
专门为了移动智能手机设计的一款jvm,但是最终失败。被Andriod直接取代。
天下第二:JRocket 和 IBM J9VM
JRocket:
特点:
- 2008年JRockit随着BEA被Oracle收购,现已不再 继续发展,永远停留在R28版本,这是JDK 6版JRockit的代号。
- JRockit内部不包含解释器实现,全部代 码都靠即时编译器编译后执行
- 专门为服务器硬件和服务端应用场景高度优化的虚拟机
意义:
- 在JDK1.8当中oracle整合JRockit到HotSpot虚拟机上,但是由于两者的特性差异较大,只整合了部分特性,结果并不是十分理想
- 作为一款优秀的JVM实现曾经领先JVM前列
- 同时伴随着优秀的组件Java Mission Control故障处理套件诞生。
IBM J9VM
特点:
- 原名叫做:IT4J,由于名字不好记J9更为广泛认知
- 由k8扩展而来,名字来源于一个8bit的错误问题
- 号称是世界上最快的Java虚拟机(官方定义)
- 在商用虚拟机的领域极具影响力
意义:
2017年左右,IBM发布了开源J9 VM
,命名为openJ9,交给Eclipse基金会管理,也称为Ecilpse openJ9
需要特殊平台运行:Bea liquid / Azulejo VM (专用虚拟机)
Bea liquid:
特点:
- 本身实现一个专门操作系统。运行在自家Hypervisor系统上
- 由于JRocket的开发而终止。
意义:
- 随着JRockit虚拟机终止开发,Liquid VM项目也停止了。
Azule VM:
特点:
- 对于HotSpot进行大量的改进,运行与Azul System专有系统上面的Java虚拟机
- 提供巨大的内存范围的停顿时间和垃圾收集时间:pic收集器c4收集器
意义:
最终产线投入到Zing VM虚拟机
- 低延迟
- 快速预热
- 易于监控
挑战:Apache Harmony / google android dalvik vm
Apache Harmony:
特点:
- 对于HotSpot进行大量的改进,运行与Azul System专有系统上面的Java虚拟机
- 提供巨大的内存范围的停顿时间和垃圾收集时间:pic收集器c4收集器
意义:
- 曾经因为提交TCK和SUN矛盾而愤然退出JCP组织
- 由于Open Jdk 的出现悄然退出市场。但是内部许多的代码吸收进ibm open jdk7的实现
google android dalvik vm
特点:
- andriod 4之前是主流的虚拟机平台,5之后被支持提前编译ART虚拟机替代
- 曾经非常强力的一个虚拟机
不能直接运行class,但是和JAVA有着很密切的关系。
- DEX文件可以通过Class文件进行转化
意义:
- andriod 5之后被支持提前编译ART虚拟机替代
其他JVM虚拟机
这里介绍一些书中没有提到的非重点的JVM虚拟机
- Micronsoft JVM:曾经作为Window平台性能最好的虚拟机。被Sun公司进行侵权制裁之后,微软转而与JAVA为敌,开发后续的.net语言对抗JAVA生态。
- KVM:强调轻量,简单,高度可移植。运行速度比较慢。在IOS和Android出现之前受到欢迎
- JAVA Card VM:JAVA虚拟机的一个子集,负责Applet解释和执行
- Squarewk VM:由Sun公司开发,运行于Sun SPot,也曾经用于java card。是一款JAVA比重十分高的虚拟机。
- JavaInJava:Sun公司在97 - 98年开发一款实验性质的虚拟机,必须运行在一个宿主的JVM上面。价值在于自证元循环,具备一定的研究价值
- Maxine VM: 和javainjava非常相似,几乎全部以JVM作为运行环境,Graal编辑器让他有了更进一步的发展,同时Graal也是作为graal编辑器的良好辅助虚拟机
- Jikes RVM: ibm开发的专门研究JAVA虚拟机技术的项目。也是一个元循环虚拟机
- IKVM.NET:基于.NET 框架的java虚拟机,借助MONO得到一定的跨平台能力
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。