JVM的生命周期和发展历程

JVM的生命周期

虚拟机的启动

Java 虚拟机的启动是通过引导类加载器(BootstrapClassLoader )创建一个初始类(initial class)来完成的这个类是虚拟机的具体实现来指定的。

虚拟机的执行

  • 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序
  • 程序开始执行时它才运行,程序结束时它就停止。
  • 执行一个所谓的Java程序的时候,真正在执行的是一个叫做Java虚拟机的进程。

虚拟机的退出

有如下几种情况:

  • 程序正常结束
  • 程序在执行过程中遇到了异常或错误而异常终止。
  • 由于操作系统出现错误而导致Java虚拟机进程终止。
  • 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作。
  • 除此之外,JNI(Java Native Interface)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出。

JVM发展历程

执行引擎结构

Sun Classic VM

  • 1996年随Java1.0版本发布,JDK1.4时被完全淘汰。

  • 它只提供解释器。

  • 如果使用JIT编译器,就需要进行外挂。但一旦使用了JIT编译器,JIT会接管虚拟机的执行系统。解释器就不再工作,解释器和编译器不能配合工作。

  • 现在hotspot内置了此虚拟机

Exact VM

  • 为了解决上一个虚拟机问题,JDK1.2时,Sun提供了此虚拟机。
  • Exact Management:准确式内存管理
    • 虚拟机可以知道内存中某个位置的数据是什么类型。
  • 具备现代高性能虚拟机的雏形
    • 热点探测
    • 编译器与解释器混合工作模式
  • 只在Solaris平台短暂使用,其它平台上还是Classic VM
    • 英雄气短,终被Hotspot虚拟机替换

Hotspot VM

  • JDK1.3时,Hotspot VM成为默认虚拟机
  • 目前Hotspot占有绝对的市场地位。
  • Hotspot指的就是热点代码探测技术。
    • 通过计数器找到最具有编译价值的代码,触发即时编译或栈上替换
    • 通过编译器与解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡。

BEA 的 JRockit

  • 专注于服务器端应用
    • 它可以不太关注程序的启动速度,因此JRockit 内部不包含解释器实现,全部代码都靠即时编译器编译后执行。
  • 大量的行业基准测试显示,JRockit JVM是世界上最快的JVM
    • 显著的性能提高(一些超过了70%)和硬件成本的减少(达50%)
  • 优势全面的Java运行时解决方案组合
    • JRockit 面对延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微妙级的JVM响应时间,适合财务、军事指挥、电信网络的需要。
    • Mission Control服务套件:以极低的开销来监控、管理和分析生产环境中的应用程序的工具
  • 2008年,BEA被Oracle收购
  • Oracle大致在JDK8在Hotspot上移植了JRockit的优秀特征。

IBM 的J9

  • 全称:IBM Technology for Java Virtual Machine,简称IT4J,内部代号:J9

  • 市场定位与Hotspot接近,服务器端、桌面应用、嵌入式等多用途JVM

  • 广泛用于IBM的各种Java产品。

  • 目前,有影响力的三大商用虚拟机之一,也是号称是世界上最快的Java虚拟机。

  • 2017年左右,IBM发布了开源J9 VM,命名为OpenJ9,交给Eclipse基金会管理,也称为 Eclipse OpenJ9
    上一篇:类加载器、双亲委派机制和沙箱安全机制
    下一篇:运行时数据区内部结构

原文地址:https://www.cnblogs.com/junlinsky/p/13396492.html