java常见gc算法有哪些
1:标记—清除(Mark-Sweep)
过程:标记可回收对象,进行清除
缺点:标记和清除效率低,清除后会产生内存碎片
2:复制算法(Copy)
过程:将内存划分为相等的两块,将存活的对象复制到另一块内存,把已经使用的内存清理掉
缺点:使用的内存变为了原来的一半
进化:将一块内存按8:1的比例分为一块Eden区(80%)和两块Survivor区(10%)
每次使用Eden和一块Survivor,回收时,将存活的对象一次性复制到另一块Survivor上,如果另一块Survivor空间不足,则使用分配担保机制存入老年代,什么时候从Survivor进入老年代,视垃圾回收器类型而定。
3:标记—整理 (压缩)(Mark—Compact)
过程:所有存活的对象向一端移动,然后清除掉边界以外的内存
缺点:相对消耗时间,去除垃圾的同时还需要整理。
4:分代收集算法
过程:将堆分为新生代和老年代,根据区域特点选用不同的收集算法,如果新生代朝生夕死,则采用复制算法,老年代采用标记清除,或标记整理