JVM(Java Virtual Machine)的发展历程是一个不断演进以适应 Java 语言发展、性能提升需求以及硬件技术进步的过程,以下是其主要的发展阶段:
一、早期 JVM(Java 1.0 - Java 1.2)
Java 1.0 时代
1996 年,Java 1.0 发布,对应的 JVM 是初代产品。这个时期的 JVM 相对简单,主要是为了实现 Java 语言 “一次编写,到处运行” 的特性。它采用了简单的解释执行方式,将 Java 字节码逐行解释执行。
垃圾回收机制也比较基础,主要采用了简单的标记 - 清除算法,并且垃圾回收效率较低。内存管理方面,堆内存结构相对简单,没有后来的分代概念。
Java 1.2 时代(引入 JIT 编译)
1998 年 Java 1.2 发布,这一版本在 JVM 的发展历程中有重要意义。它引入了即时编译(Just - In - Time, JIT)技术。JIT 编译器在运行时将热点代码(经常被执行的代码片段)编译成机器码,提高了代码的执行速度。
在内存管理方面,开始有了初步的分代思想,将堆分为新生代和老年代,不同代采用不同的垃圾回收策略,提高了垃圾回收的效率。
二、JVM 性能优化与功能扩展(Java 5 - Java 8)
Java 5
2004 年 Java 5 发布,JVM 在这一版本中得到了进一步的优化。
在垃圾回收方面,引入了多种新型的垃圾回收器。例如,并行收集器(Parallel Collector),它采用多线程并行的方式进行垃圾回收,提高了垃圾回收的吞吐量。
对 Java 内存模型(Java Memory Model, JMM)进行了修订,解决了之前内存模型中的一些问题,提高了多线程程序的正确性和性能。
Java 6
2006 年 Java 6 发布,JVM 继续改进。
对垃圾回收器进行了更多的优化,例如 G1(Garbage - First)垃圾回收器在 Java 6u14 版本中以体验版的形式出现,它采用分区的思想对堆内存进行管理,在垃圾回收效率、可预测的停顿时间等方面有很大优势。
在性能方面,通过优化 JIT 编译器等方式进一步提高了 Java 程序的执行效率。
Java 7
2011 年 Java 7 发布,JVM 在垃圾回收方面有了新的进展。
G1 垃圾回收器在 Java 7u4 版本被正式推出,并且在 Java 7 中得到了更多的改进。
在内存管理上,对方法区(永久代)的管理也进行了一些调整。
Java 8
2014 年 Java 8 发布,JVM 在内存结构上有了重大变革。
方法区被元空间(Metaspace)取代,元空间使用本地内存,解决了永久代在内存管理上的一些问题,如内存泄漏风险等。
在垃圾回收方面,继续优化 G1 等垃圾回收器的性能,使其在不同场景下的适用性更强。
三、现代 JVM(Java 9 及以后)
Java 9
2017 年 Java 9 发布,JVM 在多个方面进行了改进。
G1 被设置为默认的垃圾回收器,这表明 G1 垃圾回收器的成熟度和在现代 Java 应用中的广泛适用性。
在模块系统的支持下,JVM 对模块的加载、内存管理等方面进行了相应的调整,提高了 Java 应用在模块化环境下的运行效率。
Java 11
2018 年 Java 11 发布,引入了 ZGC(Z Garbage Collector)。
ZGC 是一款以低延迟为首要目标的垃圾收集器,能够在非常短的时间内完成垃圾回收,停顿时间通常不超过 10 毫秒,并且可以处理从 8MB 到 16TB 的堆内存,可扩展性强。
后续版本(Java 12 及以后)
在 Java 12、Java 13 等后续版本中,继续对现有的垃圾回收器(如 G1、ZGC)进行优化,同时也在探索新的垃圾回收技术和 JVM 性能提升的方法,以适应不断发展的 Java 应用需求和硬件技术的进步。
评论区