JVM——垃圾收集算法

1. 标记——清除算法:

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

      

  两个不足:

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

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

2:复制算法:

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

        

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

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

3. 标记——整理算法:

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

          

4. 分代收集:

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

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

猜你喜欢

转载自www.cnblogs.com/Xjx-zhenCai/p/11360451.html
今日推荐