垃圾收集算法
主要介绍常见垃圾收集算法的思想。
前言
一本好书,每读一遍都会有不同的感受。写读书笔记,一来是便于平时查阅,毕竟技术书籍都比较厚,不方便随时携带;二来是督促自己多读书,理论与实践结合才能不断提升自己。
【深入理解Java虚拟机】阅读笔记: 3.3 垃圾收集算法
标记 - 清除算法
算法分为“标记” 和 “清除” 两个阶段
- 标记所有需要回收的对象
- 统一回收所有被标记的对象
不足
- 效率问题。标记和清除两个过程效率都不高
- 空间问题。标记清除之后会产生大量不连续的内存碎片
复制算法
将可用内存分为大小相等的两块,每次只使用其中的一块。当这一块用完了,将还存活的对象复制到另一块上面
商业虚拟机采用该算法回收新生代。新生代分为一块较大的 Eden 空间和两块较小的 Survivor 空间。
HotSpot 虚拟机默认 Eden 和 Survivor 的大小比例是 8 : 1,新生代可用空间为 90% (80% + 10%)
标记 - 整理算法
标记过程与 “标记 - 清除” 算法一样。
整理 (Compact) 即让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
分代收集算法
根据对象存活周期的不同将内存划分为:新生代、老年代。
新生代采用复制算法
老年代使用 “标记 - 清理” 或者 “标记 - 清除” 算法
参考
周志明. 深入理解Java虚拟机
相关文章
- 2017-10-22
Java 内存自动管理可归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。
- 2017-10-21
垃圾回收算法在 HotSpot 虚拟机上的实现。
- 2017-10-20
在堆里面存放着 Java 世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。
- 2017-10-15
Java 虚拟机所管理的内存包括多个运行时数据区域,每个区都有自己的特点。
- 2017-10-16
在 Java 虚拟机规范的描述中,除了程序计数器外,虚拟机的其他几个运行时区域都有发生 OutOfMemoryError 异常的可能。