头图

深入理解JVM虚拟机 - 虚拟机的发展历史

​ 内容基本来自《深入理解JVM虚拟机》。算是对于发展历史的一点个人总结。

概述:

  1. JVM的发展历史以及历史进程
  2. Hotspot为什么可以称霸武林
  3. Hotspot和JRocket 合并,结果喜忧参半
  4. 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得到一定的跨平台能力

Xander
198 声望51 粉丝