1.6 KiB
1.6 KiB
弱分代假说: 绝大多数对象都是朝生夕灭的 强分代假说: 熬过越多次垃圾收集过程的对象就越难以消亡 跨代引用假说: 跨代引用相对于同代引用来说仅占极少数
垃圾收集分类
部分收集(partial GC)
指目不是完整收集整个Java堆的来及收集 新生代收集(minor GC/Young GC) 目标只是新生代的垃圾收集 老年代收集(Major GC/Old GC) 目标只是老年代的垃圾收集,目前只有CMS 混合收集(Mixed GC) 收集整个新生代和部分老年代,目前只有G1
整堆收集(Full GC)
收集整个Java堆和方法区
标记清除算法
先标记需要清除的对象或是存活的对象,再清除需要回收的对象 缺点
- 执行效率不稳定,包含大量对象时如果大部分都要回收,必须进行大量动作而效率降低
- 内存空间的碎片化,清理之后会产生大量不连续的内存碎片,后续需要分配较大对象时无连续内存需触发另一次垃圾收集
标记复制算法
划分出两块同样大小的内存区域,当一块内存区域用完时,就将需要存活的对象移动到另一块区域,已使用内存区域直接清除 缺点
- 复制对象开销大
- 空间浪费大 半分区复制分代策略 分为Eden和两块Survivor 比例8:1:1 使用一块Eden和一块Survivor 当Survivor不足以容纳对象时通过分配担保机制进入老年代
标记整理算法
让所有存活对象往内存一段移动,清理掉边界外内存
移动对象内存回收更复杂,不移动则内存分配更复杂