JVM学习日记 02 -,-JVM迭代演进家族史V1 | 8月更文挑战

243 阅读3分钟

引言

要把java虚拟机学精学痛。了解一些Java虚拟机的历史是必要的,所以就有了这篇文章,本文写于2021/08/02,于2021/08/14完成第一次重构。

重构内容

2021/08/14

  • 调整标题,增加关键字的显示,修改语句不通顺问题
  • 扩展了其他内容

JAVA虚拟机家族

虚拟机(1.0) Sun Classic

初出茅庐Classic VM

1996年1月23日,JDK1.0横空出世,java语言正式进入商用,此时的虚拟机代表为Classic VM,就和所有出生的天才一样,小时候并不完美,不完美在哪呢?就是你要编译java代码,只能用纯解释器,哎,你说我就不,我就要用即时编译器,那对不起,你必须外挂,而且外挂之后,你就不能再使用解释器了。

java慢的问题

上面说了,既然编译器和解释器只能二选一,那会带来什么问题呢?我们知道java代码执行啊,分为解释执行编译执行。啥是解释执行呢,解释执行说白了就是得逐行解释,那效率自然是很低的。编译执行指的是编译后执行。你要使用编译执行,那就必须对每个方法每行代码都必须编译,这样编译任务就很延时时间就会过,容易造成程序的卡顿,同时你还不能去使用耗时的技术去优化它。

虚拟机(1.2) 细致区分Exact VM

JDK1.2时,Sun团队带来了Exact VM,这货叫准确式虚拟机,哪里准呢?就是它能看出你内心深处,啊不是内存深处的数据到底是什么类型,你说这有什么用呢?我们知道我们的数据类型就是分为引用类型基本类型,你如果没办法知道数据是什么类型,你就没办法判断哪些对象被引用,哪些没有被引用,就没办法进行垃圾回收了,Exact VM虚拟机存在时间比较短,虽已具备现代虚拟机的雏形,但并没有走向商用。

武林盟主(1.3):HotSpot VM

1997年,Sun公司获得了HotSpot,该虚拟机继承了前两款商用虚拟机的优点,它的优势正如它的名字一样,针对热点探测,先通过计数器找出最具有价值的代码,然后通知即时编译器以方法为单位进行编译。

如果方法调用频繁或方法中有效循环次数很多,将会触发标准即时编译和栈上替换编译,解释器与即时编译器分工合作,在提高性能和响应时间方面取得了最大程度的平衡,这样有助于引入更复杂的代码优化技术,输出高质量代码。

其它虚拟机

  • 天下第二:BEA JRockit / IBM J9 VM
  • 小家碧玉:Mobile / Embedded
  • 软硬合璧:BEA Liquid VM / Azul VM
  • 挑战者:Apache Harmony / Google Android Dalvik VM

BEA JRockit

JRockit有号称世界上最快的虚拟机,服务于服务端的一款高性能虚拟机,由于只关注服务领域,所以可不考虑程序响应速度,因此JRockit内部就没有解释器啥事了,全靠即时编译器一人搞定,同时JRockit还有JMCjava mission control)套件。08年被Oracle收购。

IBM J9

主要为IBM公司的产品提供服务,定位和HotSpot相近,市场定位也更好,16年进行了开源,命名为OpenJ9,也是一款不错的虚拟机。

题外话

写文章好累,制作不易,希望大家喜欢。