标记-清除算法
两个阶段:标记和清除
缺点:时间:效率低;空间:产生大量不连续的内存碎片。
复制算法
原理:将可用内存按容量划分为了大小相等的两块,把一个区域里面存活的对象复制到另一个区域里面,将这个区域的内存空间一次性清理掉。
优点:不用考虑内存碎片等复杂情况,只要移动指针,按顺序分配内存即可,实现简单,运行高效。
缺点:将内存缩小为了原来的一半,内存的代价有一丢丢大。
标记-整理算法
两个步骤:标记和整理
标记同标记清除算法
整理原理:让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
分代收集算法
原理:根据对象的存活周期的不同将内存划分为几块,一般是把Java堆划分为新生代和老生代,根据各个年代的特点采用适当的收集算法。
新生代采用复制算法(每次GC只有少量对象存活),老年代采用“标记-清理”或者“标记-清楚”算法(对象存活率高,没有额外空间对他进行担保)