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。这些新的垃圾回收器在保持低延迟的同时,提供了更高的吞吐量和更大的堆内存支持。

相关推荐
YH552698410 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
2602_9599609213 小时前
谢飞机面试大厂:Spring Boot、JVM、Redis、Kafka、微服务与音视频搜索场景求生实录
java·jvm·spring boot·redis·面试题
wuminyu15 小时前
JDK21中虚拟线程和FFM协同实现高并发源码剖析
java·linux·c语言·jvm·c++
SWAGGY..15 小时前
【C++进阶】:(1)继承机制详解
java·jvm·c++
一木 之林17 小时前
三、内存管理、指针与堆栈
c语言·jvm·c++
2602_959960921 天前
Java大厂面试实录:Spring Boot、Redis、Kafka、Elasticsearch、分布式事务与云原生高并发系统
java·jvm·spring boot·redis·面试题
鱼鳞_1 天前
热门八股-JVM
java·jvm
studyForMokey1 天前
【Android 内存管理】JVM 内存模型与 GC 原理
android·jvm
城管不管1 天前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
金銀銅鐵2 天前
[Java] 一个方法最多可以有多少个入参?
java·jvm