1.标记-清除算法(Mark and Sweep)
标记:从根(GC Root)集合进行扫描,对存活的对象进行标记。–(可达性分析算法)
清除:对堆内存从头到尾进行线性遍历,回收不可达对象
缺点:垃圾回收后会产生不连续的内存碎片。(例如,途中的CD HI被回收后,空闲的内存空间并不连续。)那么在下一次申请比较大的连续空间时,可能会没有可用使用的内存空间,导致提前触发下一次的内存回收。
2.复制算法
1.分为对象面和空闲面
2.对象在对象面上创建
3.存活的对象从对象面复制到空闲面
4.将对象面的所有对象内存一次清空
缺点: 1.内存使用率低,只有50%;2.在有大量对象存活的场景,需要进行大量的复制操作
3.标记整理算法
1.标记:从根集合进行扫描,对存活的对象进行b标记----可达性
2.清除:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收
4.分代收集算法
1.垃圾回收算法的组合拳
2.按照对象生命周期的不同,划分区域,以采用不同的垃圾回收算法
(例如,新生代常用复制算法,老年代可能用其他算法)
目的:提高jvm的回收效率