垃圾收集算法有
- 引用计数法
这个算法会导致很多不被使用代对象无法被回收。JVM并没有才有此算法。
- 可达性分析算法
各个对象到GCRoots到引用链到分析。存在可达到饮用链,则认为不被回收。
-
标记-清除算法
如名字分为两个阶段: 标记:首先标记所有需要回收的对象,在标记完成之后统计回收所有被标记的对象,它的标记过程即为上面的可达性分析算法。 清除:清除所有被标记的对象 缺点:
效率不足,标记和清除效率都不高 空间问题,标记清除之后会产生大量不连续的内存碎片,导致大对象分配无法找到足够的空间,提前进行垃圾回收。
-
复制算法
将可用的内存按容量划分为大小相等的2块,每次只用一块,当这一块的内存用完了,就将存活的对象复制到另外一块上面,然后把已使用过的内存空间一次清理掉。
-
标记-压缩算法
-
分代收集算法
JVM分代垃圾收集算法代使用情况:
1.新生代每次收集都有大量对象死去,只有少量存活,那就选用复制算法,复制的对象数较少就可完成收集。
2.老年代对象存活率高,使用**标记-压缩算法**,以提高垃圾回收效率。