JVM——垃圾收集算法

Posted xjx-zhencai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM——垃圾收集算法相关的知识,希望对你有一定的参考价值。

1. 标记——清除算法:

  最基础的算法,分为两个标记和清除两个阶段:首先标记所有需要回收的对象,在标记完成后统一清除。

      技术图片

 

 

  两个不足:

    1:标记和清除效率都不高

    2:会产生大量不连续的内存碎片,可能导致以后无法给大对象分配内存;

2:复制算法:

  复制算法将可用内存容量分为大小相等两块,每次只使用一块,当一块用完了,将还存活的对象一次性复制到另一块上,然后再把已使用的那一块直接清理掉。

        技术图片

   在效率上大有提高,但是内存只用了一半,有点浪费。

   现在的商业虚拟机都采用这种收集算法回收新生代,但是并不是划分为大小相等的两块,而是一块较大的 Eden 空间和两块较小的 Survivor 空间,每次使用 Eden 和其中一块 Survivor。在回收时,将 Eden 和 Survivor 中还存活着的对象全部复制到另一块 Survivor 上,最后清理 Eden 和使用过的那一块 Survivor。

 

3. 标记——整理算法:

  复制算法不适用于老年代对象,所以提出了另外一种算法,标记过程和标记清除一样,但是后面时将存活对象向一端移动,直接清理掉端边界以外的值  

          技术图片

4. 分代收集:

  把堆分为老年代和新生代,新生代每次友大批对象死去,选用复制算法,老年代存活率较高,使用标记算法。

 

 

 

 

 

 

本文图形采用了这个作者的图案,原博文链接:https://github.com/zanwen/my-offer-to-java,不使用在任何商业用途上,只供学习记录。

 

以上是关于JVM——垃圾收集算法的主要内容,如果未能解决你的问题,请参考以下文章

JVM垃圾回收算法与垃圾收集器

JVM理论:(二/3)垃圾收集算法垃圾收集器

JVM之垃圾收集算法与垃圾收集器

JVM-垃圾收集的过程

JVM-垃圾收集算法和垃圾收集器

JVM之垃圾收集器