深入理解JVM系列教程(01) - HotSpot VM

简介: 深入理解JVM系列教程(01) - HotSpot VM

本文总结阅读于 – 《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》

简介

HotSpot VM(热点虚拟机) 是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。

历史

1997年之前: 不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的;

1997年:Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。

2006年: 在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码,并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。

2008年和2009年: Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM 和 HotSpot VM。

2009年以后: Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。

技术特征

这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,

HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势,如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC,而Exact VM之中也有与HotSpot几乎一样的热点探测。

为了Exact VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利),HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。

Oracle公司收购Sun后,宣布整合这两款虚拟机,方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器MissionControl服务,使用HotSpot的JIT编译器与混合的运行时系统。

总结

目录
相关文章
|
3月前
|
存储 SQL 算法
jvm性能调优 - 11J线上VM调优案例分享
jvm性能调优 - 11J线上VM调优案例分享
60 0
|
4月前
|
前端开发 JavaScript 算法
尚硅谷JVM全套教程
尚硅谷JVM全套教程
|
5月前
|
算法 数据可视化 Java
深入理解JVM系列教程(完) - 终章总结
深入理解JVM系列教程(完) - 终章总结
35 0
|
5月前
|
Java 编译器
深入理解JVM系列教程(12) - 热部署
深入理解JVM系列教程(12) - 热部署
57 0
|
5月前
|
监控 数据可视化 Java
深入理解JVM系列教程(09) - JDK可视化工具
深入理解JVM系列教程(09) - JDK可视化工具
28 1
|
5月前
|
数据采集 监控 算法
深入理解JVM系列教程(07) - 垃圾收集器
深入理解JVM系列教程(07) - 垃圾收集器
33 0
|
5月前
|
Java
深入理解JVM系列教程(06) - 内存溢出与泄漏
深入理解JVM系列教程(06) - 内存溢出与泄漏
35 0
|
5月前
|
存储 Java 编译器
深入理解JVM系列教程(02) - Java内存结构
深入理解JVM系列教程(02) - Java内存结构
146 0
|
2月前
|
存储 缓存 安全
深入理解JVM - Hotspot算法细节
深入理解JVM - Hotspot算法细节
37 0
|
3月前
|
Java
Springboot项目启动失败: (JVM running for 2.723) 与目标 VM 断开连接, 地址为: ‘‘127.0.0.1:23604‘,传输: ‘套接字‘‘
Springboot项目启动失败: (JVM running for 2.723) 与目标 VM 断开连接, 地址为: ‘‘127.0.0.1:23604‘,传输: ‘套接字‘‘
93 0