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——垃圾收集算法的主要内容,如果未能解决你的问题,请参考以下文章