《深入理解Java虚拟机》笔记02 -- 垃圾收集算法

Posted 一剑侵心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《深入理解Java虚拟机》笔记02 -- 垃圾收集算法相关的知识,希望对你有一定的参考价值。

1. 标记 - 清除算法

    先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法。其他收集算法都是根据其思路,改进其不足之处。

    缺点:1) 标记和清除两个阶段的效率都不高;2)清除后会产一大量不连续的内存碎片

2. 复制算法

    将可用内存划分为大小相等的两块,每次只使用其中一块。当一块内存用完了,将还存活的对象复制到另一块,然后将使用过的那块全部清空。

    缺点:可使用内存仅为分配的一半,代价太高。

    这种算法主要用在新生代。新生代中大多数对象都是朝生夕死的,所以并不需要1:1来划分,而是分为一块较大的Eden区和两块较小的Survivor区,每次使用Eden和其中一块Survivor。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor区,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认的Eden和Survivor的大小比例是8:1。

3. 标记 - 整理算法

    标记过程与“标记 - 清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

4. 分代收集算法

    按照对象存活周期的不同,一般把Java堆分为新生代和老年代。新生代采用复制算法,老年代采用“标记 - 清理”或“标记 - 整理”算法。

以上是关于《深入理解Java虚拟机》笔记02 -- 垃圾收集算法的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解Java虚拟机》读后笔记-垃圾收集算法

深入理解JVM虚拟机读书笔记——垃圾回收器

深入理解JVM虚拟机读书笔记——垃圾回收器

深入理解Java虚拟机之读书笔记二 垃圾收集器

《深入理解java虚拟机》笔记JVM调优(分代垃圾收集器)

《深入理解Java虚拟机》读书笔记-垃圾收集器与内存分配策略