3.1、JVM-垃圾回收-如何判断对象为垃圾对象?

  • 如何判断对象为垃圾对象?

    • 引用计数法

    • 可达性分析法

  • 如何回收?

    • 回收策略

      • 标记-清除算法

      • 复制算法

      • 标记-整理算法

      • 分代收集算法

    • 垃圾回收器

      • Serial

      • Parnew

      • Cms

      • G1

  • 何时回收?


引用计数算法

 

    在对象中添加一个引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,当引用失效的时候,计数器的值就-1(简单便捷,但没有人使用这种算法,因为这种算法只在引用地址指向堆的地方计数,如果堆中的多个实例相互引用而不是引用地址引用,这时引用计数算法是计数的,导致堆中相互引用的对象不会被垃圾回收)

3.1、JVM-垃圾回收-如何判断对象为垃圾对象?

  • 打印垃圾回收日志的参数

    • 垃圾日志简单信息:-verbose:gc

    • 垃圾日志详细信息:-verbose:gc -XX:+PrintGCDetails3.1、JVM-垃圾回收-如何判断对象为垃圾对象?3.1、JVM-垃圾回收-如何判断对象为垃圾对象?


可达性分析法

    通过一系列的称为'GC Roots'的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。避免了引用计数算法的问题,如下图object5、6、7当有对象相互关联时,但是它们到GC Roots是不可达的,所以他们将会被判定为是可回收的对象。3.1、JVM-垃圾回收-如何判断对象为垃圾对象?

                                                                                                 注:博文内容来自书本《深入理解Java虚拟机》第2版 周志明著