GC算法与分类(Java虚拟机)

一 . GC算法总结

    1.引用计数(淘汰)

GC算法与分类(Java虚拟机)

    GC算法与分类(Java虚拟机)

2.标记-清除

GC算法与分类(Java虚拟机)

    3.标记-压缩

GC算法与分类(Java虚拟机)

    4.复制算法

          -新生代

GC算法与分类(Java虚拟机)


二 . 理解分代思想:

  1.依据对象的存活周期进行分类,短命对象为新生代,长命对象归为老年代.

  2.根据不同年代的特点,选取合适的收集算法

        - 少量对象存活,适合复制算法

        - 大量对象存活,适合标记清理或者标记压缩


所有的算法,都需要能够识别一个垃圾对象, 因此需要给出一个可触及性的定义.

三. 可触及性.

     1.可触及的

        - 从根节点可以触及这个对象

     2. 可复活的

        - 一旦所有引用被释放,就是可复活状态

        - 因为在finalize()中可能复活该对象

     3. 不可触及的

       - 在finalize()后,可能会进入不可触及状态

       - 不可触及的对象不可能复活

        - 可以回收

下面一个例子帮助理解

GC算法与分类(Java虚拟机)

所以: 避免使用finalize(); === 什么是finalize(),点击链接

    - 栈中引用的对象

    - 方法区中静态成员或者常量引用的对象(全局对象)

    - JNI方法栈中引用的对象

GC引起的全局停顿:

GC算法与分类(Java虚拟机)