• 垃圾收集算法的实现涉及大量的程序细节。
  • 这里只重点介绍 分代收集理论 和 几种算法思想及发展过程
    Java虚拟机——垃圾收集算法-LMLPHP

3.3.1 分代收集理论

  • 分代收集建立在两个 分代假说之上
  1. 弱分代假说 : 绝大多数对象都是朝生夕灭的
  2. 强分代假说: 熬过越多次垃圾收集过程的对象就越难以消亡。
  • 它们共同奠定了常用的垃圾收集器的一致的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄分配到不同的区域之中存储。
  • 年龄:就是对象熬过垃圾收集过程的次数
    Java虚拟机——垃圾收集算法-LMLPHP
  • 分代收集理论放在现在的商用Java虚拟机里面,设计者一般会把Java堆分为 新生代和老年代。
  • 新生代中每垃圾收集都会有大批对象死去 , 而每次回收后存活的少量的对象,将会晋升到老年代中存放。
    Java虚拟机——垃圾收集算法-LMLPHP
  • 为了解决这个问题,多了第三条经验法则
  1. 跨代引用假说: 跨代引用相对于同代引用来说是极少数。(存在互相引用的两个对象,是应该倾向于同时生存或者同时消亡)
    Java虚拟机——垃圾收集算法-LMLPHP

针对不同分代的名词

Java虚拟机——垃圾收集算法-LMLPHP

3.3.2 标记-清除算法

  • 最早也是最基础的垃圾收集算法
    Java虚拟机——垃圾收集算法-LMLPHP

3.3.3 标记-复制算法

  • 也叫作复制算法,为了解决标记-清楚算法面对 大量可回收对象效率低的问题。

Java虚拟机——垃圾收集算法-LMLPHP

3.3.4 标记-整理算法

  • 针对老年代对象存亡的特征,1974年提出了标记-整理算法。
    Java虚拟机——垃圾收集算法-LMLPHP
06-12 06:00