垃圾回收算法
1. 标记-清除算法(mark-sweep)最基础的算法
首先标记要回收的对象,然后一次性清除
1) 有两个缺点
l 清除效率不高
l 可能会产生大量不连续的内存碎片,当一个较大对象需要分配内存时可能会提前触发另一次垃圾回收
2) 分为存活,可回收,未使用三个状态
2. 复制收集算法(copying)
将内存划分为等大的两块,每次使用其中一块,当一块用完时,将存活的复制到另一块,再将已使用的清理
1) 此算法缺陷浪费一半的内存
2) 存活对象较多时,要执行较多的复制,影响效率
3) 现在商用比较倾向使用此方法
l 不按1:1分配,按Eden:Survivor:Survivor(8:1:1)
l 每次使用Eden和一块Survivor,回收时,将存活的对象拷贝到另一块Survivor,然后再清理使用的两块
l 当一块Survivor内存不足时需要通过分配担保机制进入老年代
3. 标记-整理算法(mark-compact)
首先标记要回收的对象,然后让所有存活对象向一端移动,最后清理掉端边界以外的内存
4. 分代收集算法(Generational Collection)
分为新生代和老年代
1) 新生代:只有少量对象会存活,使用复制算法
2) 老年代:存活率高,没有额外空间进行分配担保,使用标记清理或标记整理算法