GC类型有哪些?
1 个回答
首先你要快乐,其次都是其次。古薰儿Java 常见 GC 类型可以按**回收目标**和**回收算法/实现**两种方式来分类。 ## 1. 按回收目标分类 | 类型 | 回收区域 | 说明 | | ----------------------- | -------------------- | --------------------------- | | **Minor GC / Young GC** | 年轻代(Eden + Survivor) | 回收新生对象,频率高,速度快 | | **Major GC / Old GC** | 老年代 | 回收老年代对象,速度比 Minor GC 慢 | | **Mixed GC** | 年轻代 + 部分老年代 | G1 专用,回收部分老年代 Region + 年轻代 | | **Full GC** | 整个堆(年轻代 + 老年代 + 方法区) | 最慢,需要 Stop-The-World,尽量减少发生 | ## 2. 按回收器实现分类(JDK 版本变化) ### JDK 8 及以前常见回收器 | 回收器 | 作用区域 | 特点 | | ------------------------------ | ---- | ------------------------------- | | **Serial** | 新生代 | 单线程,Stop-The-World,适合小堆、单核 CPU | | **Serial Old** | 老年代 | 单线程老年代收集器 | | **ParNew** | 新生代 | 多线程版 Serial,常与 CMS 搭配 | | **Parallel Scavenge** | 新生代 | 吞吐量优先,自动调整堆大小与 GC 时间 | | **Parallel Old** | 老年代 | Parallel Scavenge 的老年代版本 | | **CMS(Concurrent Mark Sweep)** | 老年代 | 并发收集,低停顿,但有内存碎片问题 | | **G1(Garbage First)** | 整堆 | 按 Region 划分,Mixed GC,低延迟,替代 CMS | ### JDK 9+ 新回收器 | 回收器 | 特点 | | -------------- | ------------------------ | | **G1** | JDK 9 默认回收器,低延迟,Region 化 | | **ZGC** | 极低延迟(<10ms),支持 TB 级堆 | | **Shenandoah** | 类似 ZGC,低停顿,OpenJDK 社区实现 | ## 3. 按算法分类 | 算法 | 用途 | 特点 | | ------------------------- | ------- | -------------- | | **标记-清除(Mark-Sweep)** | 老年代 | 简单,容易产生内存碎片 | | **标记-整理(Mark-Compact)** | 老年代 | 清理碎片,移动对象,成本较高 | | **复制算法(Copying)** | 新生代 | 速度快,内存利用率低 | | **分代收集(Generational GC)** | 新生代+老年代 | 根据对象存活周期选择算法 |发布于 2025-08-13 05:51 •IP属地 青海举报评论收藏
公众号进入网站体验更佳

