(37讲)垃圾回收算法——标记整理算法和分代收集算法

上一节在复制算法中也了解到了,复制算法,它主要是针对新生代内存进行收集的一种算法,它有一个假定,每次回收,最后存活的概率是比较小的,一般是在百分之十左右,超过百分之十我们需要内存担保,就需要额外申请内存,这个过程如果对于新生代内存当然是可以的,这种算法是比较高效的,但是对于老年代内存怎么办呢?这个时候就会出问题,我们说老年代内存一般是回收的效率是非常低的,就是说,可能有百分之九十的存活,那么,这个时候,每次在进行分配的时候,都需要进行内存的分配担保,那么,这个过程反而会导致这个过程变慢,那么,我们本节课所要了解的标记整理算法,它就是解决这个问题的,它主要是针对老年代内存去进行回收的,那么也就是说,针对回收效率不高,回收垃圾较少的这么一种情况,那么,它到底是如何去处理的呢?我们看到,标记-清除和标记整理,在这个过程中其实,前面都是标记,那么也就是说,标记清除和标记整理它们前段的过程都是相同的,都是先进行标记,那么,标记处理方法也是相同的,不同的是后面,之前是清除,直接的就挨个的去进行清除了现在是整理,整理完之后在清除,可以这么理解,标记-整理-清除,意思就是,它先进行标记,标记完了之后,它让没有被定为垃圾对象的对象,它向内存的一端去移动,画个图来说明一下,

这是一块内存区域,这里面有很多的内存,

我们认为,需要回收的内存不多,比如说就这么几个内存要进行回收

认为这一块是不需要回收的

这一块是需要回收的

中间有一个分界线,

让需要回收的内存往这边走

如果这边有不需要回收的内存,就往左边走

仅仅是移动,移动完之后,我们发现

这一边就全部都是需要回收的,直接把这一块内存区域给清理掉就行了,这样要比标记-清除算法执行的效率要高,这就是标记整理算法。

接下来看分代收集算法,并不是一个新的算法,它是采用了标记-整理算法复制算法进行一个结合,我们说内存分新生代和老年代针对新生代和老年代不同的特点,就采用分代收集算法就可以了,就是说,分代收集算法,它根据内存的分代,选择不同的垃圾回收算法,也就是说,它会针对新生代或者所谓的内存回收率较高的这么一种内存区域,它会选择复制算法如果对于老年代或者说内存回收率比较低的,那么,它会选择标记整理算法,这就是分代收集算法的原理

到这里,四种关于垃圾回收的算法就都介绍完了。后面会针对具体的来说一下关于垃圾收集器一些相关的内容。

猜你喜欢

转载自blog.csdn.net/G_66_hero/article/details/86513822