GC 频率 vs 触发条件

发布时间:2026/5/18 16:40:48

GC 频率 vs 触发条件 在 Java 中垃圾回收GC的频率和触发条件取决于GC算法、堆内存分配、对象生命周期以及JVM参数的配置。GC 触发条件年轻代 GCMinor GC / Young GCEden 区满了当新对象分配到 Eden 区如果 Eden 区没有足够的空间分配新对象就会触发 Minor GC。Survivor 空间不足当存活对象从 Eden 复制到 Survivor但 Survivor 空间不够时也可能导致 Minor GC。仅回收年轻代Young Generation不会影响老年代Old Generation。采用复制算法如 Serial、Parallel、G1 的 YGC。停顿时间短但回收频率较高。Minor GC 之后存活对象可能晋升到老年代。老年代 GCMajor GC / Old GC老年代空间不足当对象从 Survivor 晋升到老年代或者大对象直接进入老年代导致老年代空间不够时会触发 Major GC。G1 GC 触发 Mixed GCG1 在一定条件下会触发回收老年代的 Mixed GC。主要清理老年代Old Generation回收存活时间较长的对象。相比 Minor GCMajor GC 的停顿时间更长但一般回收频率较低。某些 GC如 CMS不会 STW而是并发执行Concurrent Mark-Sweep。Full GC显式调用System.gc()不推荐因为 JVM 可能会忽略。老年代空间不足当老年代没有足够空间存放新对象时Major GC 可能变成 Full GC。Metaspace/元空间溢出如类加载过多导致java.lang.OutOfMemoryError: Metaspace。G1 GC 触发 Full GC当 G1 发现回收无法跟上对象分配速度时会进行 STW 的 Full GC。回收整个堆包括年轻代 老年代 元空间。停顿时间长影响系统吞吐量和响应时间。一般不希望频繁发生 Full GC需要调优。GC 频率的影响因素对象分配速率短生命周期对象多临时变量、业务请求数据→Minor GC 频繁。大量大对象如byte[]→ 可能直接进入老年代加速 Major/Full GC。GC 算法不同 GC 算法对 GC 频率的影响不同Serial GC单线程、适用于小内存 → GC 频率高暂停时间长。Parallel GC多线程 GC吞吐量优先 → GC 频率较低适用于高吞吐场景。G1 GC区域化分代、回收预测 → 控制 GC 停顿时间适用于大内存。ZGC、Shenandoah GC低延迟 GC → 减少 GC 影响适用于大内存应用。

相关新闻