分代垃圾回收中把对象分类成几代,根据不同的代数,使用不同的GC算法,我们把刚生成的对象称为新生代,到达一定年龄后称为老年代
新生代
新生代对象大部分会变成垃圾,我们可以通过只找活动对象的算法(标记清除...大小分别默认为 140k,28k,28k,940k
同时准备一个记录集数组,$rs
启动新生代GC
所有新分配的对象,都将进入生存空间,当生成空间满了之后,将启动GC复制算法....将正在使用的幸存空间作为from空间,未使用的作为to空间,生成空间和from幸存空间的活动对象都会被复制到to幸存空间中
这些活动对象的年龄都会增加1岁
注意:在执行新生代GC中,除了会引用根的活动对象...,以此来缩减GC的时间,但是在上面我们知道,老年代的变量也可能引用到新生代的变量,那就意味着我们需要搜索整个老年代空间的所有对象去找引用,这样就大大的削减了分代垃圾回收的机制
因此,我们通过记录集来记录老年代对象到新生代对象的引用...,在新生代GC时,不去搜索老年代堆空间,而是直接找到记录集中记录存在引用关系的老年代对象进行关联
老年代GC
老年代GC直接使用了标记-清除算法,这里就不细说了
本文为仙士可原创文章,转载无需和我联系