简单回顾java垃圾回收器发展史|面试
共 956字,需浏览 2分钟
·
2024-04-11 10:03
Java垃圾回收器(GC)的发展史体现了Java平台对性能优化的不断追求,旨在满足各种应用场景下对吞吐量、延迟和资源利用率的不同需求。以下是Java垃圾回收器发展的主要里程碑:
1. 早期的垃圾回收器
-
串行垃圾回收器(Serial GC):Java初始版本中的默认GC,使用单线程进行垃圾回收,适用于小型应用和低并发环境。由于它在执行垃圾回收时会暂停所有应用线程(Stop-The-World, STW),因此并不适合高并发应用。
2. 并行与并发垃圾回收器
-
并行垃圾回收器(Parallel GC):也被称为吞吐量收集器,使用多个线程来缩短垃圾回收的停顿时间,提高了处理能力,成为许多服务器应用的首选。
-
并发标记清除(CMS)垃圾回收器:目的是减少垃圾回收时的停顿时间,通过并发标记和并发清除阶段来实现,适合对响应时间有严格要求的应用。
3. G1垃圾回收器
-
G1(Garbage-First)垃圾回收器:在Java 7中引入,旨在替代CMS收集器,提供更可预测的垃圾回收停顿时间。G1通过将堆分割成多个区域(Region)来管理,可以并行、并发地执行垃圾回收,特别适用于大堆内存的应用。
4. 低延迟垃圾回收器
-
ZGC(Z Garbage Collector):从Java 11开始可用,设计目标是在大堆内存情况下将停顿时间限制在几毫秒内,同时不牺牲太多的吞吐量,实现极低延迟。
-
Shenandoah:与ZGC类似,从Java 12开始作为实验特性引入,其主要目标也是减少GC停顿时间,适用于需要低延迟且堆内存较大的应用。
5. 发展趋势和影响
随着时间的推移,Java垃圾回收器的发展反映了对不同应用需求的理解和满足。早期,重点在于简化内存管理和提高应用吞吐量。随后,随着多核处理器的普及和应用对延迟敏感度的增加,垃圾回收器的设计开始更多地考虑并行处理能力和减少停顿时间。
Java垃圾回收器的发展史不仅展示了技术的进步,也反映了社区对提升Java应用性能和响应性的不断探索和努力。未来,随着新的硬件技术和软件架构的发展,Java垃圾回收器仍有进一步优化和创新的空间。