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
上一篇:类加载器、双亲委派机制和沙箱安全机制
下一篇:运行时数据区内部结构