垃圾收集算法

2020-07-03  本文已影响0人  陈桐Caliburn

垃圾收集算法

1、标记-清除算法(mark-sweep)

首先标记出所有需要回收的对象,在标记完成后统一进行回收所有被标记对象
存在问题:
1、效率问题,标记和清除两个过程效率不高
2、空间问题,标记清除后产生大量不连续内存碎片,空间碎片太多可能导致程序后续分配大对象时,提前触发gc

2、标记-整理算法(mark-compat)

标记出所有需要回收的对象,标记完成后,让所有存活对象都向一端移动,直接清理掉端边界以外的内存。
标记-整理算法在标记-清除算法基础上,又进行对象移动,因此成本更高,但解决内存碎片问题。该垃圾回收算法适用于对象存活率搞得场景(老年代)

3、复制算法

复制算法将可用内存容量划分为大小相等两块,每次只使用其中一块,当一块内存用完,就将存货的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。算法适用于对象存活率低的场景,比如新生代。
IBM公司研究,新生代中的对象98%朝生夕死,分配比例8:1
Eden:Survivor0:Survivor1= 8:1:1。意外情况需要依赖其他内存(老年代)进行分配担保

4、分代收集算法

根据对象生存周期不同将内存进行划分。
新生代对象存活率低,采用复制算法
老年代存活率高,就采用标记-清除算法或标记-整理算法

5、垃圾收集器

垃圾收集器
上一篇下一篇

猜你喜欢

热点阅读