回收对象的年龄——对象熬过垃圾收集过程的次数
标记清除算法
标记出所有需要回收的对象,标记完后统一回收掉所有标记的对象,标记的过程就是判断对象是否为垃圾。
缺点:
1、执行效率不稳定。标记和清楚两个过程的执行效率都随对象数量增长而降低
2、内存空间的碎片化。会产生大量不连续的内存碎片,需分配大对象时不得不提前触发另一次垃圾收集
标记复制算法
将可用内存按容量划分成相同的两块,每次只用一块,当这一块用完把还存活着的复制到另一块,在清楚使用过的内存空间。
优点:
实现简单,运行高效
缺点
大量的空间浪费
jvm的内存分配为啥是8:1:1
由于大部分的新生代都是朝生夕灭的,很少可以活过第一轮收集,所以内存分配大小比例一般是8:1:1,先放8的那部分,满了后活下来的和其中一个1里活下来的复制到另一个1里,然后清空。
标记整理算法
标记出所有还存活的对象,让所有存活的对象都向内存空间一端移动,然后直接清理掉边界以外的内存
分代算法:
根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。