1.标记 -清除法
a.
原理:
“标记-
清除
”
(
Mark-Sweep
)算法,如它的名字一样,算法分为
“
标记
”
和
“
清除
”
两 个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来标记不需要回收的对象。
问题:
i.
标记和清除两个过程效率不⾼,产⽣内存碎⽚导致需要分配较⼤对象时⽆法找到⾜够的连续内存⽽需要触发⼀次
GC
操 作
。
2. 标记-压缩法
原理:
适合⽤于存活对象较多的场合,如⽼年代。它在标记
-
清除算法的基础上做了⼀些优化。标记阶段⼀样,但之后,将所 有存活对象压缩到内存的⼀端。之后,清除边界外所有的空间。
优点:
i.
解决了标记
-
清除算法导致的内存碎⽚问题和在存活率较⾼时复制算法效率低的问题
。
3.复制算法:
a.
原理:
它将可用内存按容量划分为大小相等的两块
,每次只使⽤其中⼀块,在垃圾回收时,将正在使⽤的内存中的存活对象复制到未使⽤的内存块中,之后清除正在使⽤的内存块中的所有对象,交换两个内存的⻆⾊,完成垃圾回收。
b.
问题:
i. 不适⽤于存活对象⽐较多的场合,如⽼年代。
4.分代回收法:
a.
原理:根据对象存活周期的不同将内存划分为⼏块,⼀般是新⽣代和⽼年代,新⽣代基本采⽤复制算法,⽼年代采⽤标记清除算法。