Files
Hui-s-notebook/分代收集理论.md
2023-09-10 10:50:53 +08:00

1.6 KiB

弱分代假说: 绝大多数对象都是朝生夕灭的 强分代假说: 熬过越多次垃圾收集过程的对象就越难以消亡 跨代引用假说: 跨代引用相对于同代引用来说仅占极少数

垃圾收集分类

部分收集(partial GC)

指目不是完整收集整个Java堆的来及收集 新生代收集(minor GC/Young GC) 目标只是新生代的垃圾收集 老年代收集(Major GC/Old GC) 目标只是老年代的垃圾收集,目前只有CMS 混合收集(Mixed GC) 收集整个新生代和部分老年代,目前只有G1

整堆收集(Full GC)

收集整个Java堆和方法区

标记清除算法

先标记需要清除的对象或是存活的对象,再清除需要回收的对象 缺点

  1. 执行效率不稳定,包含大量对象时如果大部分都要回收,必须进行大量动作而效率降低
  2. 内存空间的碎片化,清理之后会产生大量不连续的内存碎片,后续需要分配较大对象时无连续内存需触发另一次垃圾收集

标记复制算法

划分出两块同样大小的内存区域,当一块内存区域用完时,就将需要存活的对象移动到另一块区域,已使用内存区域直接清除 缺点

  1. 复制对象开销大
  2. 空间浪费大 半分区复制分代策略 分为Eden和两块Survivor 比例8:1:1 使用一块Eden和一块Survivor 当Survivor不足以容纳对象时通过分配担保机制进入老年代

标记整理算法

让所有存活对象往内存一段移动,清理掉边界外内存

移动对象内存回收更复杂,不移动则内存分配更复杂