零基础学习性能测试第五章:JVM性能分析与调优-垃圾回收器的分类与回收
目录
-
-
- 一、垃圾回收器分类三维图
- 二、7大经典回收器对比表(核心特性+适用场景)
- 三、回收器工作机制图解
-
- 1. **Serial回收器 - “单线程保洁员”**
- 2. **CMS回收器 - “低延迟专家”**
- 3. **G1回收器 - “分区回收大师”**
- 4. **ZGC回收器 - “TB级堆的极速王者”**
- 四、不同场景回收器选型指南
-
- 场景1:电商大促系统(8核16G)
- 场景2:金融交易系统(低延迟要求)
- 场景3:数据分析批处理(吞吐优先)
- 五、调优实战案例:日活百万的APP后端优化
-
- **问题现象**:
- **优化过程**:
- 六、新一代回收器对比(ZGC vs Shenandoah)
- 七、回收器参数优化模板
-
- G1调优模板(16G堆):
- ZGC调优模板(大内存):
- 八、终极选型决策树
-
以下是针对零基础学习者的 JVM垃圾回收器分类与回收机制 终极解析,结合可视化模型与实战对比,助你彻底掌握不同回收器的核心差异与选型策略:
一、垃圾回收器分类三维图
#mermaid-svg-5fq8lYVVR6GEuvRI {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .error-icon{fill:#552222;}#mermaid-svg-5fq8lYVVR6GEuvRI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5fq8lYVVR6GEuvRI .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-5fq8lYVVR6GEuvRI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5fq8lYVVR6GEuvRI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5fq8lYVVR6GEuvRI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5fq8lYVVR6GEuvRI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5fq8lYVVR6GEuvRI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5fq8lYVVR6GEuvRI .marker.cross{stroke:#333333;}#mermaid-svg-5fq8lYVVR6GEuvRI svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5fq8lYVVR6GEuvRI .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .cluster-label text{fill:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .cluster-label span{color:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .label text,#mermaid-svg-5fq8lYVVR6GEuvRI span{fill:#333;color:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .node rect,#mermaid-svg-5fq8lYVVR6GEuvRI .node circle,#mermaid-svg-5fq8lYVVR6GEuvRI .node ellipse,#mermaid-svg-5fq8lYVVR6GEuvRI .node polygon,#mermaid-svg-5fq8lYVVR6GEuvRI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5fq8lYVVR6GEuvRI .node .label{text-align:center;}#mermaid-svg-5fq8lYVVR6GEuvRI .node.clickable{cursor:pointer;}#mermaid-svg-5fq8lYVVR6GEuvRI .arrowheadPath{fill:#333333;}#mermaid-svg-5fq8lYVVR6GEuvRI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5fq8lYVVR6GEuvRI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5fq8lYVVR6GEuvRI .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-5fq8lYVVR6GEuvRI .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-5fq8lYVVR6GEuvRI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5fq8lYVVR6GEuvRI .cluster text{fill:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI .cluster span{color:#333;}#mermaid-svg-5fq8lYVVR6GEuvRI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5fq8lYVVR6GEuvRI :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 垃圾回收器 线程模式 内存区域 算法类型 单线程 多线程并行 多线程并发 新生代 老年代 全堆 标记-复制 标记-清除 标记-整理
二、7大经典回收器对比表(核心特性+适用场景)
-XX:+UseSerialGC
-XX:+UseParNewGC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
-XX:+UseZGC
-XX:+UseShenandoahGC
📌 核心选择标准:
- 吞吐量优先 → Parallel Scavenge + Parallel Old
- 低延迟优先 → G1/ZGC/Shenandoah
- 小内存 → Serial + Serial Old
三、回收器工作机制图解
1. Serial回收器 - “单线程保洁员”
#mermaid-svg-xa2ywg4oge5UsbPy {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xa2ywg4oge5UsbPy .error-icon{fill:#552222;}#mermaid-svg-xa2ywg4oge5UsbPy .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-xa2ywg4oge5UsbPy .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-xa2ywg4oge5UsbPy .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-xa2ywg4oge5UsbPy .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-xa2ywg4oge5UsbPy .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-xa2ywg4oge5UsbPy .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-xa2ywg4oge5UsbPy .marker{fill:#333333;stroke:#333333;}#mermaid-svg-xa2ywg4oge5UsbPy .marker.cross{stroke:#333333;}#mermaid-svg-xa2ywg4oge5UsbPy svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-xa2ywg4oge5UsbPy .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-xa2ywg4oge5UsbPy text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-xa2ywg4oge5UsbPy .actor-line{stroke:grey;}#mermaid-svg-xa2ywg4oge5UsbPy .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-xa2ywg4oge5UsbPy .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-xa2ywg4oge5UsbPy #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-xa2ywg4oge5UsbPy .sequenceNumber{fill:white;}#mermaid-svg-xa2ywg4oge5UsbPy #sequencenumber{fill:#333;}#mermaid-svg-xa2ywg4oge5UsbPy #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-xa2ywg4oge5UsbPy .messageText{fill:#333;stroke:#333;}#mermaid-svg-xa2ywg4oge5UsbPy .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-xa2ywg4oge5UsbPy .labelText,#mermaid-svg-xa2ywg4oge5UsbPy .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-xa2ywg4oge5UsbPy .loopText,#mermaid-svg-xa2ywg4oge5UsbPy .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-xa2ywg4oge5UsbPy .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-xa2ywg4oge5UsbPy .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-xa2ywg4oge5UsbPy .noteText,#mermaid-svg-xa2ywg4oge5UsbPy .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-xa2ywg4oge5UsbPy .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-xa2ywg4oge5UsbPy .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-xa2ywg4oge5UsbPy .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-xa2ywg4oge5UsbPy .actorPopupMenu{position:absolute;}#mermaid-svg-xa2ywg4oge5UsbPy .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-xa2ywg4oge5UsbPy .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-xa2ywg4oge5UsbPy .actor-man circle,#mermaid-svg-xa2ywg4oge5UsbPy line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-xa2ywg4oge5UsbPy :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 应用线程 Serial GC Eden区满 暂停所有线程(STW) 单线程标记存活对象 复制到Survivor区 恢复运行 应用线程 Serial GC
特点:简单高效无竞争,但STW时间长
2. CMS回收器 - “低延迟专家”
#mermaid-svg-uPsklHnGgG8J7m7W {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .error-icon{fill:#552222;}#mermaid-svg-uPsklHnGgG8J7m7W .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-uPsklHnGgG8J7m7W .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-uPsklHnGgG8J7m7W .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-uPsklHnGgG8J7m7W .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-uPsklHnGgG8J7m7W .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-uPsklHnGgG8J7m7W .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-uPsklHnGgG8J7m7W .marker{fill:#333333;stroke:#333333;}#mermaid-svg-uPsklHnGgG8J7m7W .marker.cross{stroke:#333333;}#mermaid-svg-uPsklHnGgG8J7m7W svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-uPsklHnGgG8J7m7W .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .cluster-label text{fill:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .cluster-label span{color:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .label text,#mermaid-svg-uPsklHnGgG8J7m7W span{fill:#333;color:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .node rect,#mermaid-svg-uPsklHnGgG8J7m7W .node circle,#mermaid-svg-uPsklHnGgG8J7m7W .node ellipse,#mermaid-svg-uPsklHnGgG8J7m7W .node polygon,#mermaid-svg-uPsklHnGgG8J7m7W .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-uPsklHnGgG8J7m7W .node .label{text-align:center;}#mermaid-svg-uPsklHnGgG8J7m7W .node.clickable{cursor:pointer;}#mermaid-svg-uPsklHnGgG8J7m7W .arrowheadPath{fill:#333333;}#mermaid-svg-uPsklHnGgG8J7m7W .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-uPsklHnGgG8J7m7W .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-uPsklHnGgG8J7m7W .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-uPsklHnGgG8J7m7W .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-uPsklHnGgG8J7m7W .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-uPsklHnGgG8J7m7W .cluster text{fill:#333;}#mermaid-svg-uPsklHnGgG8J7m7W .cluster span{color:#333;}#mermaid-svg-uPsklHnGgG8J7m7W div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-uPsklHnGgG8J7m7W :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 初始标记 STW 并发标记 重新标记 STW 并发清除
四步过程:
- 初始标记:标记GC Roots直接关联对象(STW短)
- 并发标记:遍历对象图(与用户线程并发)
- 重新标记:修正并发标记变动(STW中)
- 并发清除:清理垃圾对象(并发)
致命缺陷:内存碎片 + 并发模式失败(Concurrent Mode Failure)
3. G1回收器 - “分区回收大师”
#mermaid-svg-dtQUS3LsOQR3vqUc {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .error-icon{fill:#552222;}#mermaid-svg-dtQUS3LsOQR3vqUc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dtQUS3LsOQR3vqUc .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dtQUS3LsOQR3vqUc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dtQUS3LsOQR3vqUc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dtQUS3LsOQR3vqUc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dtQUS3LsOQR3vqUc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dtQUS3LsOQR3vqUc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dtQUS3LsOQR3vqUc .marker.cross{stroke:#333333;}#mermaid-svg-dtQUS3LsOQR3vqUc svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dtQUS3LsOQR3vqUc .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .cluster-label text{fill:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .cluster-label span{color:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .label text,#mermaid-svg-dtQUS3LsOQR3vqUc span{fill:#333;color:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .node rect,#mermaid-svg-dtQUS3LsOQR3vqUc .node circle,#mermaid-svg-dtQUS3LsOQR3vqUc .node ellipse,#mermaid-svg-dtQUS3LsOQR3vqUc .node polygon,#mermaid-svg-dtQUS3LsOQR3vqUc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dtQUS3LsOQR3vqUc .node .label{text-align:center;}#mermaid-svg-dtQUS3LsOQR3vqUc .node.clickable{cursor:pointer;}#mermaid-svg-dtQUS3LsOQR3vqUc .arrowheadPath{fill:#333333;}#mermaid-svg-dtQUS3LsOQR3vqUc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dtQUS3LsOQR3vqUc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dtQUS3LsOQR3vqUc .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-dtQUS3LsOQR3vqUc .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-dtQUS3LsOQR3vqUc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dtQUS3LsOQR3vqUc .cluster text{fill:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc .cluster span{color:#333;}#mermaid-svg-dtQUS3LsOQR3vqUc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dtQUS3LsOQR3vqUc :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} G1堆结构 Region2 Region1 Region4 Region3 Region2048 ... 回收过程 初始标记 STW 并发标记 最终标记 STW 筛选回收 STW
核心创新:
- 将堆划分为等长Region(默认2048个)
- 优先回收价值最大的Region(垃圾比例高)
- 可预测停顿模型:
-XX:MaxGCPauseMillis=200
4. ZGC回收器 - “TB级堆的极速王者”
#mermaid-svg-ynXbzANNdnJUI5gD {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .error-icon{fill:#552222;}#mermaid-svg-ynXbzANNdnJUI5gD .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ynXbzANNdnJUI5gD .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ynXbzANNdnJUI5gD .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ynXbzANNdnJUI5gD .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ynXbzANNdnJUI5gD .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ynXbzANNdnJUI5gD .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ynXbzANNdnJUI5gD .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ynXbzANNdnJUI5gD .marker.cross{stroke:#333333;}#mermaid-svg-ynXbzANNdnJUI5gD svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ynXbzANNdnJUI5gD .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .cluster-label text{fill:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .cluster-label span{color:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .label text,#mermaid-svg-ynXbzANNdnJUI5gD span{fill:#333;color:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .node rect,#mermaid-svg-ynXbzANNdnJUI5gD .node circle,#mermaid-svg-ynXbzANNdnJUI5gD .node ellipse,#mermaid-svg-ynXbzANNdnJUI5gD .node polygon,#mermaid-svg-ynXbzANNdnJUI5gD .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ynXbzANNdnJUI5gD .node .label{text-align:center;}#mermaid-svg-ynXbzANNdnJUI5gD .node.clickable{cursor:pointer;}#mermaid-svg-ynXbzANNdnJUI5gD .arrowheadPath{fill:#333333;}#mermaid-svg-ynXbzANNdnJUI5gD .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ynXbzANNdnJUI5gD .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ynXbzANNdnJUI5gD .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ynXbzANNdnJUI5gD .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ynXbzANNdnJUI5gD .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ynXbzANNdnJUI5gD .cluster text{fill:#333;}#mermaid-svg-ynXbzANNdnJUI5gD .cluster span{color:#333;}#mermaid-svg-ynXbzANNdnJUI5gD div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ynXbzANNdnJUI5gD :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 并发标记 并发预备重分配 并发重分配 并发重映射
三大黑科技:
- 着色指针:在指针中存储对象状态信息
- 读屏障:动态修正对象引用
- 内存映射:支持TB级堆,STW<10ms
适用场景:云原生/大数据/实时交易系统
四、不同场景回收器选型指南
场景1:电商大促系统(8核16G)
# 目标:平衡吞吐与延迟-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=4m
场景2:金融交易系统(低延迟要求)
# 亚毫秒级暂停-XX:+UseZGC -XX:+ZGenerational # JDK21+启用分代ZGC-Xmx32g
场景3:数据分析批处理(吞吐优先)
# 最大化计算资源利用率-XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:GCTimeRatio=99 # GC时间占比<1%
五、调优实战案例:日活百万的APP后端优化
问题现象:
- 高峰期API延迟飙升至2秒
- CMS频繁发生Concurrent Mode Failure
优化过程:
- 诊断工具:
# 发现老年代碎片率45%jmap -heap <pid># GC日志显示:[CMS-concurrent-mark: 1.234/2.345 secs][CMS Failure: Allocation Failure]
- 切换回收器:
# 从CMS迁移到G1-XX:+UseG1GC -XX:MaxGCPauseMillis=150-XX:G1HeapRegionSize=4m
- 结果对比:
指标 CMS G1 提升幅度 平均延迟 1240ms 230ms 81%↓ 99%延迟 3560ms 450ms 87%↓ Full GC次数 12次/小时 0次 100%↓
六、新一代回收器对比(ZGC vs Shenandoah)
💡 选型建议:
- OpenJDK环境 → Shenandoah(兼容性更好)
- Oracle JDK → ZGC(官方支持更强)
七、回收器参数优化模板
G1调优模板(16G堆):
-XX:+UseG1GC-Xms12g -Xmx12g-XX:MaxGCPauseMillis=200 # 目标暂停时间-XX:G1HeapRegionSize=4m # 区域大小-XX:InitiatingHeapOccupancyPercent=45 # 老年代占比45%触发GC-XX:ConcGCThreads=4 # 并发线程数-XX:G1ReservePercent=15 # 保留内存防晋升失败
ZGC调优模板(大内存):
-XX:+UseZGC-Xms24g -Xmx24g-XX:ConcGCThreads=8 # 并发线程数-XX:SoftMaxHeapSize=20g # 动态堆调整上限-XX:+ZProactive # 主动触发回收-XX:+ZGenerational # JDK21+启用分代
八、终极选型决策树
避坑指南:
- CMS在JDK14被废弃,JDK17移除 → 勿在新项目使用
- G1的
-XX:MaxGCPauseMillis
只是目标值,非硬承诺- ZGC在JDK21前无分代 → 年轻代回收效率低
通过本指南,您将掌握:
✅ 主流回收器核心工作机制
✅ 不同场景下的选型策略
✅ 关键参数优化技巧
✅ 避免回收器选型误区
✅ 应对高并发低延迟的终极方案
立即行动:使用命令java -XX:+PrintFlagsFinal -version | grep GC
查看当前JVM默认回收器!