- 垃圾收集算法的实现涉及大量的程序细节。
- 这里只重点介绍 分代收集理论 和 几种算法思想及发展过程
3.3.1 分代收集理论
- 分代收集建立在两个 分代假说之上
- 弱分代假说 : 绝大多数对象都是朝生夕灭的
- 强分代假说: 熬过越多次垃圾收集过程的对象就越难以消亡。
- 它们共同奠定了常用的垃圾收集器的一致的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄分配到不同的区域之中存储。
- 年龄:就是对象熬过垃圾收集过程的次数
- 分代收集理论放在现在的商用Java虚拟机里面,设计者一般会把Java堆分为 新生代和老年代。
- 新生代中每垃圾收集都会有大批对象死去 , 而每次回收后存活的少量的对象,将会晋升到老年代中存放。
- 为了解决这个问题,多了第三条经验法则
- 跨代引用假说: 跨代引用相对于同代引用来说是极少数。(存在互相引用的两个对象,是应该倾向于同时生存或者同时消亡)
针对不同分代的名词
3.3.2 标记-清除算法
- 最早也是最基础的垃圾收集算法
3.3.3 标记-复制算法
- 也叫作复制算法,为了解决标记-清楚算法面对 大量可回收对象效率低的问题。
3.3.4 标记-整理算法
- 针对老年代对象存亡的特征,1974年提出了标记-整理算法。