垃圾回收
新生代(标记复制):serial + parnew + paralle Scavenge
老年代(标记整理):serialold + paralleold + CMS(标记清除)
共用:Z1 + ZGC
关注吞吐量:paralle Scavenge + paralleold
关注停顿时间:G1 / paralle Scavenge + CMS
垃圾回收器
CMS
G1
是什么:是 JDK 7 引入的一款 面向低延迟应用 的垃圾收集器,主要用于 大内存(如 6GB 以上) 场景,并在 JDK 9 之后成为默认 GC(替代 CMS)
适用场景:大堆内存(6GB 以上)低停顿(游戏)、 CMS 的替代方案
特点:Region 化管理、Remembered Set、增量回收、可预测的 STW 停顿时间、避免全堆扫描
GC方式:minor mixed full都存在
相关JVM参数:
| 参数 | 说明 |
|---|---|
-XX:+UseG1GC |
启用 G1 垃圾回收器 |
-XX:MaxGCPauseMillis=<N> |
设定最大 GC 停顿时间(单位 ms) |
-XX:InitiatingHeapOccupancyPercent=<N> |
触发并发标记的老年代占比(默认 45%) |
-XX:G1HeapRegionSize=<N> |
指定 Region 大小(默认 1MB ~ 32MB,取决于堆大小) |
垃圾回收算法
标记-复制(新生代)
标记-清除(CMS)
标记-整理(G1 or 其他老年代回收器)
垃圾回收方式
Minor GC
Mixed GC
定义:Mixed GC 是针对 年轻代 和 老年代 的垃圾回收,它是 G1(Garbage First)垃圾收集器 中的回收类型之一
触发条件:在 G1 垃圾回收器中,当年轻代空间和老年代空间的内存压力较大时,会触发 Mixed GC。此外,G1 会定期进行 Mixed GC,并回收部分老年代对象。
特征:
- Mixed GC 通常会回收一部分 老年代 对象,因此它的 回收范围 比 Minor GC 要广泛
- 减少 Full GC 的触发频率:通过回收部分老年代对象,Mixed GC 可以有效避免触发 Full GC,提升性能
回收过程:
- 年轻代 的对象和一部分 老年代 对象会被一起回收
- 会对 老年代 执行一次并发的垃圾回收过程,以便释放老年代的内存空间
Full GC
触发条件:常见的有老年代空间不足,System.gc(),方法区内存不足(java8之前)