Java虚拟机的历史

当谈到Java虚拟机时,许多人把它们等同于热点虚拟机。但实际上,除了HotSpot之外,还有Sun Classic VM、Exact VM、BEA JRocketit、IBM J9等等。今天我们将简要回顾Java虚拟机的历史。

虚拟机始祖:Sun Classic

1996年1月23日,Sun发布了JDK 1.0,带有自己的虚拟机Classic VM。然而,该虚拟机具有仅使用纯解释器来执行Java代码的特性。如果要使用JIT编译器,则必须使用插件。

提示:执行代码可以分为编译执行和解释执行。解释执行指的是在解释时运行代码。编译执行是指在执行之前的编译。
但是如果插入了JIT编译器,JIT编译器将完全替换虚拟机的执行系统,并且解释器将不再工作。简单地说,在Sun Classic虚拟机中,解释器和编译器不能共存。

即使使用插件JIT编译器,Sun Classic虚拟机的执行速度也不够快。由于解释器无法与编译器一起工作,因此虚拟机无法判断哪个方法被频繁使用,因此只能编译每个方法。这导致虚拟机只能采用相对简单的优化技术,不能进行稍高耗时的优化技术。因为如果将耗时的优化技术应用于所有代码,那么编译时间将非常慢。

虽然Sun经典虚拟机存在这样那样的问题,但是它的生命力仍然很强。在JDK 1.3之前,它是JDK的默认虚拟机。在JDK 1.3中,HotSpot成为默认虚拟机,并作为备用虚拟机存在。到了JDK 1.4,它正式退出了历史舞台。可以说,Sun Classic已经存在了将近四年,但是另一个虚拟机并不那么幸运。

无疾而终:Sun Exact VM

在Sun Classic发布之后,Sun的虚拟机团队在JDK 1.2发布了一个名为Exact VM的虚拟机,试图解决Classic VM遇到的所有问题。它的执行系统解决了经典VM的解释器和编译器不能同时工作的问题。它还具有现代高性能处理器的一些特点,如两级即时编译。

此外,Exact VM还改进了虚拟机的对象查找。在经典VM中,如果您想要找到对象,您需要通过句柄(类似于指针)来找到它。如果需要搜索对象,则需要通过它所构建的句柄树逐层搜索它。但是,在Exact VM中使用了精确内存管理,即虚拟机可以准确地知道内存中数据的类型,从而降低了搜索成本,提高了执行性能。

不幸的是,虽然ExactVM已经发布,但它直到退出后才真正大规模使用。当发布JDK 1.2时,启动了精确的VM,但Sun经典VM仍然是默认的Java虚拟机。当JDK 1.3发布时,虚拟机HotSpot VM被引入作为默认虚拟机,Sun Classic VM被引入作为备用虚拟机。

武林盟主:Sun HotSpot VM

热点VM可以说是最广泛使用的Java虚拟机,它几乎为所有Java虚拟机所知。但实际上,虚拟机不是由Sun开发的,而是由Longview Technologies开发的。Sun注意到JIT编译中的许多优秀结果,于1997年收购了Longview Technologies,并收购了HotSpot VM。

HotSpot不仅具有上述两台虚拟机(如精确的内存管理)的优点,还具有热点检测等许多新技术。热点检测技术是指通过执行计数器,找出最有价值的代码,然后通知JIT编译器在方法上进行深入的优化。但是Exact VM中也有类似的技术,Sun内部也有很大的争议,但是为什么选择HotSpot作为默认虚拟机还不清楚。

总的来说,自2000年发布JDK 1.3以来,HotSpot VM一直作为默认虚拟机处于历史阶段。现在,2018年,18年过去了,它仍然是我们最常用的虚拟机,它显示了Sun HotSpot VM的韧性。

百家争鸣:BEA JRockit / IBM J9 VM

所有这些都是Sun公司推出的虚拟机,但是除了Sun公司,其他组织和公司也开发了许多虚拟机实现,其中最著名的是BEA JRockit和IBM J9 VM。

BEA的JRockit是一个专注于服务器硬件和服务器应用程序场景的虚拟机。它对服务器场景做了很多优化,因此它不太关注程序启动速度。JRockit虚拟机不包含解释器实现,所有代码都由即时编译器编译和执行。此外,它的任务控制服务套件也非常强大。

IBM的J9 VM是一个更通用的虚拟机,它被定位为应用于从服务器到桌面应用程序到嵌入式系统的多用途虚拟机。IBM开发J9VM作为IBM各种Java产品的执行平台。

武林外传:那些无名虚拟机

从 Sun Classic、Sun Exact VM、Sun HotSpot VM,再到 BEA JRockit、IBM J9 VM,这几个虚拟机可以说是虚拟机的正史了,是每个 Java 程序员应该了解的。但在这之外,其实还有各种各样的虚拟机存在。

例如,最强大的不是上面提到的虚拟机,而是专用的商业和虚拟机,称为Azul VM和BEA.VM。这些虚拟机只在特定的硬件平台上运行,所以要求比较高。但是它的性能也很强。它可以管理至少几十个CPU和数百GB的内存资源,但也为垃圾收集器提供了在大内存范围内可控的GC时间,等等。

此外,还有许多其他虚拟机,比如Apache Harmony、Google Android Dalvik VM、Mircosoft JVM等等。

最后的赢家:Oracle

回顾所有这些历史,Sun发布的虚拟机似乎与Oracle无关。但在2010年,甲骨文收购了Sun,因此甲骨文拥有HotSpot VM。2008年,甲骨文从BEA收购了JRocket VM,拥有全球最好的两台虚拟机。

为了将来规划虚拟机,Oracle宣布将把JRockit的优秀特性集成到HotSpot VM中,例如移植JRockit的垃圾收集器和任务控制服务。

附录:Java 虚拟机历史

JDK 版本升级不仅仅体现在语言和功能特性上,还包括了其编译和执行的 Java 虚拟机的升级。

当JDK 1在1996发布时,它为纯解释执行提供了一个Java虚拟机实现:Sun经典VM。

1997年,当JDK 1.1发布时,虚拟机没有改变,并且Sun Classic VM仍然被用作默认虚拟机。

1998,当发布JDK 1.2时,提供了在Solaris平台上运行的精确VM虚拟机,但Sun经典VM仍然被用作默认Java虚拟机。

2000年,发布了JDK 1.3。默认的Java虚拟机从Sun经典VM更改为Sun HooSopt VM,而Sun经典VM被用作备用虚拟机。

2002年,发布了JDK 1.4。Sun Classic VM退出商业虚拟机阶段,并直接使用Sun HotSpot VM作为默认虚拟机。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员-张凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值