巩固知识体系!Java虚拟机的历史(1)

即使使用插件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 虚拟机历史


最后的内容

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)

如何准备面试?

1、前期铺垫(技术沉积)

程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

下面是我会看的一些资料笔记,希望能帮助大家由浅入深,由点到面的学习Java,应对大厂面试官的灵魂追问,有需要的话就戳这里:蓝色传送门打包带走吧。

这部分内容过多,小编只贴出部分内容展示给大家了,见谅见谅!

  • Java程序员必看《Java开发核心笔记(华山版)》

  • Redis学习笔记

  • Java并发编程学习笔记

四部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇

  • Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)

  • 大厂面试必问——数据结构与算法汇集笔记

其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。

2、狂刷面试题

技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。

①大厂高频45道笔试题(智商题)

②BAT大厂面试总结(部分内容截图)

③面试总结

3、结合实际,修改简历

程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:

以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

以上文章中,提及到的所有的笔记内容、面试题等资料,均可以免费分享给大家学习,有需要的话就戳这里打包带走吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值