Java垃圾收集算法初步了解


Java垃圾收集算法初步了解

GC算法,也就是Garbage Collected,垃圾回收算法。

  • 标记-清除算法
  • 复制算法
  • 标记-整理算法
  • 分代收集算法

标记-清除算法

基础的垃圾回收算法,后面几个算法都是在这个基础上进行的改进。

就是进行最简单的,先对所有要回收的对象进行==标记==,标记完成之后直接统一==回收==。

标记-回收算法

问题:

  • 效率问题
  • 空间问题(太多碎片)

复制算法

这种方法是对标记-清除算法的改进,为了==改进其效率问题==

将内存分为两块,保持其中一块的空白。每次操作,比如新建对象什么的,只是其中的一块内存。

然后在进行垃圾回收时,首先还是对要回收的对象进行标记。但是将剩余的仍然存活的对象,复制到另一块内存中并进行整理。

然后在这块内存用完之后,将其中仍然存活的对象复制到另一块内存内,然后将用完的这一整块内存直接全部回收

复制算法

标记-整理算法

针对老年代特点(每次都有很多对象幸存)。

仍然是先进行标记,与标记-清除算法一样。

然后不是直接回收已标记内存,而是让所有存活对象向前移动,然后将边界以外的内存全部清除掉。

标记-整理算法

分代收集算法

没有啥新思想,只是根据不同的内存区域,也就是不同的“代”来采用不同的垃圾回收算法

现在JVM都是用分代收集算法。

一般分为新生代和老年代。

  • 新生代:==每次收集都有大量对象死去==;所以说复制幸存的对象的成本低,可以采用复制算法
  • 老年代:==对象存活几率较高==;没有多余的内存空间可以使用,所以说采用标记-清除算法或者是标记-整理算法。

文章作者: SongX64
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 SongX64 !
  目录