堆内存主要分为年轻代和老年代,不同年龄的对象放入不同的代,在不同的代使用不同的算法,这样可以针对算法做优化。
分代的依据是weak generational hypothesis-----弱代世界假设,大部分对象很快分配,也很快死亡,比如那些在函数中new出来的对象,函数执行完后对象的引用也消失了,对象就变为垃圾;少部分对象会存活不久,比如那些被全局引用的对象。
年轻代中死亡的对象比较多,垃圾回收比较频繁,由于空间比较小,垃圾收集比较快,时间比较短;垃圾回收过程中,也可能有对象被提升到老年代中。
老年代的空间比较大,垃圾收集频率比较低,时间比较长。