在jvm里面我们知道有很多的垃圾回收算法,常用的有:标记-清除算法,复制算法、标记整理算法、分代算法。 这里呢我们不介绍太多。这里主要以目前实际使用过程中这种分代场景进行介绍。
我们知道现在jvm内存都是分代,分为年轻代和老年代,在年轻代里面还分为eden区和s0,s1区。那么在年轻代使用什么样的算法呢?
其实就是标记->清除->整理->复制
1)标记
在垃圾回收的触发过程中,垃圾回收器首先查找下内存中哪些对象是在使用的,哪些对象不是正在使用的,如果不是正在使用的,而且未被其他对象引用的,则标记出来。
2)清除
第二步就是把未被其他对象引用的对象直接清除掉,此时内存区域就会出现很多空点。
3)整理(压缩)
出现空点的区域由于存放其他大对象的内存又不够,不能很好的把当前内存区域空间利用起来,那么就需要对存储空间进行整理,把空点区域释放出来,形成一个大的区域,这样就可以存储更多的对象。
4)复制
复制其实就是把剩余存活的对象从当前区域复制到另外的空闲区域,常见的有:eden区复制到s区,年轻代复制到老年代。
还没有评论,来说两句吧...