常见的垃圾回收器算法有哪些,各有什么优劣?

Posted inet_ygssoftware

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见的垃圾回收器算法有哪些,各有什么优劣?相关的知识,希望对你有一定的参考价值。

标记清除

这种算法分两分: 标记、清除两个阶段,
标记阶段是从根集合(GC Root)开始扫描,每到达一个对象就会标记该对象为存活状态,清除阶段在扫描完成之后将没有标记的对象给清除掉。
在这里插入图片描述
这个算法有个缺陷就是会产生内存碎片,如上图B被清除掉后会留下一块内存区域,如果后面需要分配大的对象就会导致没有连续的内存可供使用。

标记整理

标记整理就没有 内存碎片的问题了,也是从根集合(GC Root)开始扫描进行标记然后清除无用的对象,清除完成后它会整理内存。
在这里插入图片描述
这样内存就是连续的了,但是产生的另外一个问题是: 每次都得移动对象,因此成本很高。

复制算法

复制算法会将JVM推分成二等分,如果堆设置的是1g,那使用复制算法的时候堆就会有被划分为两块区域各512m。 给对象分配内存的时候总是使用其中的一块来分配,分配满了以后,GC就会进行标记,然后将存活的对象移动到另外一块空白的区域,然后清除掉所有没有存活的对象,这样重复的处理,始终就会有一块空白的区域没有被合理的利用到。
在这里插入图片描述
两块区域交替使用,最大问题就是会导致空间的浪费,现在堆内存的使用率只有50%。

以上是关于常见的垃圾回收器算法有哪些,各有什么优劣?的主要内容,如果未能解决你的问题,请参考以下文章

常见的垃圾回收器你知道有哪些吗?

JVM学习记录-垃圾回收算法

新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

JVM学习--垃圾回收器

5、垃圾回收机制

CMS垃圾回收器