垃圾收集算法

主要介绍常见垃圾收集算法的思想。

前言

一本好书,每读一遍都会有不同的感受。写读书笔记,一来是便于平时查阅,毕竟技术书籍都比较厚,不方便随时携带;二来是督促自己多读书,理论与实践结合才能不断提升自己。

【深入理解Java虚拟机】阅读笔记: 3.3 垃圾收集算法

标记 - 清除算法

算法分为“标记” 和 “清除” 两个阶段

  • 标记所有需要回收的对象
  • 统一回收所有被标记的对象

不足

  • 效率问题。标记和清除两个过程效率都不高
  • 空间问题。标记清除之后会产生大量不连续的内存碎片

复制算法

将可用内存分为大小相等的两块,每次只使用其中的一块。当这一块用完了,将还存活的对象复制到另一块上面

商业虚拟机采用该算法回收新生代。新生代分为一块较大的 Eden 空间和两块较小的 Survivor 空间。

HotSpot 虚拟机默认 Eden 和 Survivor 的大小比例是 8 : 1,新生代可用空间为 90% (80% + 10%)

标记 - 整理算法

标记过程与 “标记 - 清除” 算法一样。

整理 (Compact) 即让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存

分代收集算法

根据对象存活周期的不同将内存划分为:新生代、老年代。

新生代采用复制算法

老年代使用 “标记 - 清理” 或者 “标记 - 清除” 算法

参考

周志明. 深入理解Java虚拟机