- JVM有哪些垃圾收集器
Java虚拟机(JVM)中包含多种垃圾收集器,它们根据不同的应用场景和性能需求设计,以下是主要的垃圾收集器及其特点:
Serial(串行)收集器:
适用于客户端环境或单CPU环境。
在进行垃圾收集时,会停止所有用户线程(Stop-The-World),即使用独占式模型。
新生代收集器,使用复制算法。
简单高效,尤其在小堆或简单应用中表现良好。
ParNew(并行)收集器:
是Serial收集器的多线程版本。
同样用于新生代,采用复制算法。
适合多CPU环境,可以显著减少垃圾收集的暂停时间。
经常与CMS收集器一起使用。
Parallel Scavenge(并行扫描)收集器:
也是一款新生代收集器,使用复制算法。
侧重于达到可控制的吞吐量,即CPU用于应用程序的时间比例。
支持自适应调节策略,可以根据实际情况动态调整参数。
Serial Old(串行老年代)收集器:
Serial收集器的老年代版本,使用标记-整理算法。
单线程,适用于小数据量或单CPU环境的老年代垃圾收集。
Parallel Old(并行老年代)收集器:
Parallel Scavenge收集器的老年代对应版本,同样使用多线程。
采用标记-整理算法,旨在提高整体吞吐量。
与Parallel Scavenge收集器搭配使用,构成一个关注吞吐量的完整收集器组合。
CMS(Concurrent Mark and Sweep,并发标记清除)收集器:
一种以最小化停顿时间为目标的老年代收集器。
使用标记-清除算法,大部分工作并发进行,减少应用暂停时间。
不是最新的技术,且可能产生较多内存碎片,已被G1逐步替代。
G1(Garbage First)收集器:
从Java 7开始引入,是面向服务器端的垃圾收集器。
将堆内存划分为多个大小相等的区域,并根据垃圾回收效益动态选择回收区域。
旨在实现低延迟的同时保持高吞吐量。
使用标记-复制算法,同时具备并行和并发的能力。
这些收集器可以根据具体应用场景通过JVM参数进行选择和配置,以达到最佳的性能表现。在实际部署中,选择合适的垃圾收集器对提升应用程序的响应速度和资源利用率至关重要。
如果大家需要视频版本的讲解,欢迎关注我的B站: