主要介绍常见垃圾收集算法的思想。
前言
一本好书,每读一遍都会有不同的感受。写读书笔记,一来是便于平时查阅,毕竟技术书籍都比较厚,不方便随时携带;二来是督促自己多读书,理论与实践结合才能不断提升自己。
【深入理解Java虚拟机】阅读笔记: 3.3 垃圾收集算法
标记 - 清除算法
算法分为“标记” 和 “清除” 两个阶段
- 标记所有需要回收的对象
- 统一回收所有被标记的对象
不足
- 效率问题。标记和清除两个过程效率都不高
- 空间问题。标记清除之后会产生大量不连续的内存碎片
复制算法
将可用内存分为大小相等的两块,每次只使用其中的一块。当这一块用完了,将还存活的对象复制到另一块上面
商业虚拟机采用该算法回收新生代。新生代分为一块较大的 Eden 空间和两块较小的 Survivor 空间。
HotSpot 虚拟机默认 Eden 和 Survivor 的大小比例是 8 : 1,新生代可用空间为 90% (80% + 10%)
标记 - 整理算法
标记过程与 “标记 - 清除” 算法一样。
整理 (Compact) 即让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
分代收集算法
根据对象存活周期的不同将内存划分为:新生代、老年代。
新生代采用复制算法
老年代使用 “标记 - 清理” 或者 “标记 - 清除” 算法
参考
周志明. 深入理解Java虚拟机