jvm发展历程介绍

初始阶段:JDK 1.0 - JDK 1.1

• 经典JVM:这是JVM的早期实现,主要特点是使用解释器(Interpreter)来逐行解释执行Java字节码。这种方式虽然简单直接,但执行效率相对较低。

• JIT编译器(Just-In-Time Compiler):为了提高执行效率,JVM引入了JIT编译器。JIT编译器能够在运行时将热点代码(即频繁执行的代码)编译成机器码,从而大大提高执行速度。不过,在JDK 1.1中,JIT编译器还是相对初级的。

成长阶段:JDK 1.2 - JDK 1.4

• 精确垃圾回收(Accurate Garbage Collection):在这个阶段,JVM的垃圾回收机制得到了显著的改进。之前的垃圾回收算法可能无法准确判断对象的生命周期,导致内存泄漏或不必要的内存占用。而精确垃圾回收能够更准确地识别并回收不再使用的对象。

• Class Data Sharing(CDS):CDS机制允许多个JVM实例共享类元数据,从而减少了内存占用和启动时间。

• HotSpot JVM:在这个阶段,HotSpot JVM逐渐成为主流。HotSpot JVM不仅包含了JIT编译器,还引入了自适应优化(Adaptive Optimization)等技术,能够根据程序的运行情况动态调整优化策略。

成熟阶段:JDK 5.0 - JDK 8

• Java内存模型(Java Memory Model, JMM):为了规范多线程编程中的内存访问行为,JVM引入了Java内存模型。JMM定义了变量如何从主内存传输到工作内存,以及如何在不同的线程之间同步这些变量的值。

• Java类加载机制(Class Loading Mechanism):在JDK 5.0及之后的版本中,JVM的类加载机制得到了进一步的完善。双亲委派模型(Parent Delegation Model)成为类加载的默认策略,它确保了Java平台的稳定性和安全性。

• 垃圾回收算法改进:在这个阶段,JVM的垃圾回收算法得到了不断的改进和优化。例如,G1(Garbage-First)垃圾回收器就是在JDK 7中引入的,并在JDK 8中得到了进一步的完善。G1垃圾回收器采用了分区(Region)的概念,能够根据应用的实际情况动态调整堆内存的使用情况,从而提高了垃圾回收的效率和性能。

新特性阶段:JDK 9 及以后

• 模块系统(Module System):在JDK 9中,JVM引入了模块系统(Jigsaw Project),以更好地支持模块化开发和部署。模块系统允许开发者将应用程序拆分成多个独立的模块,每个模块都包含了自己的代码、资源和依赖关系。

• AOT编译(Ahead-Of-Time Compilation):与JIT编译不同,AOT编译是在程序运行之前就将Java字节码编译成机器码。这种方式可以减少程序运行时的编译开销,提高启动速度和执行效率。不过,AOT编译也面临着一些挑战,比如如何准确地预测哪些代码会被执行、如何处理动态生成的代码等。

• ZGC和Shenandoah GC:在JDK 11及之后的版本中,JVM引入了新的垃圾回收器ZGC和Shenandoah GC。这些新的垃圾回收器在保持低延迟的同时,提供了更高的吞吐量和更大的堆内存支持。

相关推荐
weixin_4565881525 分钟前
JVM(java虚拟机)
java·开发语言·jvm
hygge99925 分钟前
JVM 内存结构、堆细分、对象生命周期、内存模型全解析
java·开发语言·jvm·经验分享·面试
小二·27 分钟前
Java虚拟机(JVM)面试题(51道含答案)
java·开发语言·jvm
无敌最俊朗@30 分钟前
03-事务高频面试总结
java·开发语言·jvm
hygge99937 分钟前
类加载机制、生命周期、类加载器层次、JVM的类加载方式
java·开发语言·jvm·经验分享·面试
修行者Java39 分钟前
JVM 垃圾回收算法的详细介绍
jvm·算法
她说彩礼65万14 小时前
C# Sqlite帮助类
jvm·sqlite·c#
dragoooon3419 小时前
[Linux——Lesson23.线程概念与控制:线程基础]
java·开发语言·jvm
装不满的克莱因瓶20 小时前
【项目亮点】基于EasyExcel + 线程池解决POI文件导出时的内存溢出及超时问题
java·jvm·excel·线程池·async·虚拟机·easyexcel
麦麦鸡腿堡1 天前
Java_HashMap底层机制与原码解读
java·开发语言·jvm