2026/1/25 11:23:25
网站建设
项目流程
网站策划书预期风险,wordpress免费资源模板,个人怎么见个网站,wordpress一直发布失败JVM 垃圾回收#xff08;GC#xff09;算法的核心目标是精准识别堆中无用对象并回收其内存#xff0c;同时兼顾回收效率、内存利用率和停顿时间。算法的演变围绕「标记 - 清理 - 整理」的核心思路展开#xff0c;分为4 种基础算法、1 种组合策略#xff08;分代收集#…JVM 垃圾回收GC算法的核心目标是精准识别堆中无用对象并回收其内存同时兼顾回收效率、内存利用率和停顿时间。算法的演变围绕「标记 - 清理 - 整理」的核心思路展开分为4 种基础算法、1 种组合策略分代收集和1 种进阶分区算法不同算法适配不同的内存分代 / 场景以下是详细拆解一、基础垃圾回收算法4 种核心这是 GC 的底层基础逻辑所有复杂收集器均基于这些算法组合 / 优化。算法类型核心步骤核心优点核心缺点适用区域 / 典型收集器标记 - 清除Mark-Sweep1. 标记通过可达性分析标记所有存活对象2. 清除遍历堆回收未标记的垃圾对象实现简单、不移动对象1. 内存碎片严重2. 效率低遍历全堆老年代 / CMS 收集器复制算法Copying1. 划分将内存分为 2 块新生代优化为 Eden:S0:S18:1:12. 复制用满后标记存活对象复制到空闲区域3. 清空销毁原区域所有内存1. 无内存碎片2. 效率高仅处理存活对象内存利用率低原始 1:1优化后 90% 可用新生代 / SerialGC、ParallelGC标记 - 整理Mark-Compact1. 标记同标记 - 清除2. 整理将所有存活对象移动到内存一端地址连续3. 清除回收边界外的所有内存1. 无内存碎片2. 内存利用率 100%效率低移动对象 更新引用老年代 / G1老年代、Serial Old标记 - 删除Mark-Delete非主流仅嵌入式 JVM 使用标记后直接删除垃圾对象不整理实现极简碎片极严重、仅适配小内存极小内存场景 / 嵌入式 JVM关键补充基础算法标记 - 清除是最早期算法CMS 收集器为优化其效率将 “清除” 拆分为 “初始标记→并发标记→重新标记→并发清除”减少 STW停止世界时间复制算法新生代的核心优化8:1:1是因为 “对象朝生夕死”Eden 区满时仅需复制少量存活对象到 Survivor 区利用率从 50% 提升到 90%标记 - 整理是老年代的 “终极选择”虽效率低但能避免碎片导致的频繁 Full GC。二、组合策略分代收集算法Generational Collection这不是独立算法而是基于「分代假说」的组合策略是 JVM 默认的 GC 核心逻辑。1. 分代假说核心依据假说 1绝大多数对象 “朝生夕死”新生代对象存活时间极短回收频率高假说 2存活对象会逐渐晋升到老年代老年代对象存活时间长回收频率低。2. 核心实现新生代用「复制算法」存活对象少复制成本低无碎片触发 Minor GCEden 区满时复制存活对象到 S0 区下次 Minor GC 复制到 S1 区多次存活后晋升老年代老年代用「标记 - 清除」或「标记 - 整理」存活对象多复制成本高优先避免移动对象触发 Major GC/Full GC老年代空间不足时回收老年代Full GC 会同时回收新生代 老年代。3. 优势兼顾 GC 效率和内存利用率新生代用复制保证快回收老年代用标记 - 清除 / 整理避免内存浪费。三、进阶算法分区收集算法Region-Based为解决 “大内存场景堆 4G下 STW 时间过长” 的问题衍生出的分区策略代表是 G1、ZGC、Shenandoah。1. 核心思路将整个堆划分为多个大小相等的独立 Region默认 1~32MB每个 Region 可动态标记为 Eden、Survivor、Old 类型打破传统 “新生代 / 老年代物理隔离”优先回收「垃圾占比最高的 Region」Garbage-FirstG1 名称由来减少单次 GC 的停顿时间。2. 实现逻辑以 G1 为例标记遍历所有 Region标记存活对象筛选计算每个 Region 的垃圾占比排序出 “收益最高” 的 Region回收后释放内存最多回收对选中的 Region用「复制算法」将存活对象复制到空闲 Region清空原 Region整理老年代 Region 回收后自动整理避免碎片。3. 核心优势可控停顿可设置最大 STW 时间如-XX:MaxGCPauseMillis200JVM 自动调整回收的 Region 数量适配大内存堆内存从几 G 到上百 G 均可高效回收ZGC/Shenandoah 甚至支持 TB 级堆全堆统一管理打破新生代 / 老年代的物理隔离回收更灵活。四、核心总结算法演变逻辑标记 - 清除碎片多→ 复制无碎片但浪费→ 标记 - 整理无碎片不浪费→ 分代组合适配→ 分区大内存优化核心适配原则新生代对象存活率低→ 复制算法老年代对象存活率高→ 标记 - 清除 / 标记 - 整理大内存场景→ 分区算法G1/ZGC实际收集器的算法组合SerialGC新生代复制 老年代标记 - 整理CMS老年代标记 - 清除并发G1全堆分区 新生代复制 老年代标记 - 整理。如果需要可补充「各 GC 算法对应的 JVM 参数配置」或「算法性能对比吞吐量 / 停顿时间」方便实战调优。