GC常用算法?
1.标记-标记清除算法,标记压缩算法,复制算法,分代收集算法。(JVM采用的是分代收集算法)
- 标记-清除算法
给每个对象存储一个标记位,记录对象的状态(死/活),两个阶段,
一.标记阶段:检查对象的标记位的状态,判断是否死亡。
二.清理阶段:将死亡的对象清理掉。
- 标记-压缩算法
是标记-清除算法的一个改进版。两个阶段:
一:标记阶段:检查对象的状态,判断是否死亡,
二:将所有存活的对象整理放到另外一处空间,把剩下的对象清除掉
- 复制算法
会将内存平均分两块,每次只使用其中的一块。当这块内存存满了,就会将这个内存存活的对象复制到另外一个内存中,将刚才那块内存清空。
- 分代收集算法:
堆如果细分,还可分为新生代和老年代
新生代里对象存活时间短,所有采用的算法是复制算法,
老年代,存活率高(生存时间长),所以使用标记-整理,或标记-清除算法