垃圾收集器 | 描述和参数 | 优点 | 缺点 |
---|---|---|---|
Serial | 单线程垃圾收集器,作用于新生代 | 没有并发锁,回收效率很高,使用场景是桌面客户端模式 | |
ParNew | 多线程版本Serial收集器,作用于新生代 | 并行收集器 | |
ParallelGC Scavenge | 在ParNew新增了两个和系统吞吐量相关的参数作用于新生代 | 达到一个可控制的吞吐量 | |
Serial Old | 单线程垃圾收集器,作用于老年代 | 使用标记整理算法 | |
Parallel Old | Parallel Scavenge 收集器的老年代版本。 | 吞吐量优先 | |
CMS | 并发垃圾收集器,作用于老年代 | 和用户线程并发执行 | 1、占用部分CPU,默认启动的垃圾回收线程是(core + 3)/4 2、由于使用了标记-清除算法会产生空间碎片,可能导致分配大对象没有连续空间,不得不提前出发full gc,提供了+UseCMSCompactAtFullCollection 开启full gc后内存碎片的整理,无法并发执行;还提供了-XX:CMSFullGCsBeforeCompaction 设置执行多少次不带碎片整理后的full gc,在下次full gc后执行碎片整理3、cms无法在当次收集处理浮动垃圾4、由于用户线程和垃圾收集器并发执行因此需要老年代预留空间给用户线程,如果无法满足程序需要,就会出现"Concurrent Mode Failure"就会临时启动Serial old收集器来重新进行老年代的垃圾收集 |
G1 | 取消了新生代、老年代的物理划分,取而代之的是将堆划分为若干个区域(Region),这些区域中包含了有逻辑上的新生代和老年代区域。 | 不用再对单个的空间对每个代进行设置了,不用担心每个代的内存是否足够。 |
JVM 垃圾收集器
于 2023-02-23 23:12:08 首次发布