2024年Java最全字节跳动技术总监自爆:Java虚拟机的历史_除了hotspot还有什么,java中级面试题及答案整理

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

本文已被CODING开源项目:【一线大厂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产品的执行平台。

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

https://bbs.csdn.net/topics/618154847)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值