Skip to content

Latest commit

 

History

History
37 lines (22 loc) · 1.38 KB

gc.md

File metadata and controls

37 lines (22 loc) · 1.38 KB

垃圾收集算法有哪些,新生代和老年代各自使用什么算法

垃圾收集算法有

  • 引用计数法

这个算法会导致很多不被使用代对象无法被回收。JVM并没有才有此算法。

  • 可达性分析算法

各个对象到GCRoots到引用链到分析。存在可达到饮用链,则认为不被回收。

  • 标记-清除算法

    如名字分为两个阶段: 标记:首先标记所有需要回收的对象,在标记完成之后统计回收所有被标记的对象,它的标记过程即为上面的可达性分析算法。 清除:清除所有被标记的对象 缺点:

    效率不足,标记和清除效率都不高 空间问题,标记清除之后会产生大量不连续的内存碎片,导致大对象分配无法找到足够的空间,提前进行垃圾回收。

  • 复制算法

将可用的内存按容量划分为大小相等的2块,每次只用一块,当这一块的内存用完了,就将存活的对象复制到另外一块上面,然后把已使用过的内存空间一次清理掉。

  • 标记-压缩算法

  • 分代收集算法

JVM分代垃圾收集算法代使用情况:

1.新生代每次收集都有大量对象死去,只有少量存活,那就选用复制算法,复制的对象数较少就可完成收集。

2.老年代对象存活率高,使用**标记-压缩算法**,以提高垃圾回收效率。