Skip to content

JVM的垃圾收集算法

506字约2分钟

后端

2024-06-08

一.分代收集理论

虚拟机在进行垃圾收集的过程中,会根据不同代的特点采用合适的垃圾收集算法。 新生代中,每次收集都会有99%的对象死亡,因此可以选择标记复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾回收 老年代中,对象的存活概率比较高,而且没有额外的空间为它进行分配担保,因此一般选择标记清除算法和标记整理算法 注意:“标记-清除”或“标记-整理”算法会比吧复制算法慢10倍以上

二.标记复制算法

标记复制算法将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块中,然后把使用的这块空间中的垃圾对象全部清理掉,这样每次都是对一般的内存区域进行回收

三.标记清除算法

标记清除算法分为标记和清除两个阶段,标记存活的对象,清除所有未标记的对象(一般为这种),也可以是标记出所有需要回收的对象,标记完成后清除所有标记的对象。 标记清除算法的两个问题

  1. 效率问题 (如果需要标记的对象太多,效率不高)
  2. 空间问题(标记清除后会产生大量不连续的碎片)

四.标记整理算法

标记整理算法在标记阶段与标记清除算法一样,但是标记完成后并不会直接回收对象,而是让所有存活的对象向一端移动,最后直接清理掉端边界以外的对象