深入理解JVM虚拟机-读书笔记【六】垃圾回收之判定对象可回收

版权声明: https://blog.csdn.net/jiangxuexuanshuang/article/details/88382490

1、引用计数法

算法:每当有一个地方引用对象时,则计数器加1。引用失效时,计数器减1。计数器为0的对象不可能再被引用。

问题:无法解决循环引用时的引用问题。如:

public class ObjectTest {

    public ObjectTest instance = null;
    public static void main(String[] args) {

        ObjectTest objectA = new ObjectTest();
        ObjectTest objectB = new ObjectTest();

        objectA.instance = objectB;
        objectB.instance = objectA;

        objectA = null;
        objectB = null;
    }

}

2、可达性分析算法

算法:有一系列的GC Root节点,从这些root节点出发,如果都没有关联到该对象,则改对象标记为不可达。

Java中可用作GCRoot的节点有:

a、虚拟机栈中引用的对象

b、方法区中类静态属性引用的对象

c、方法区中常量引用的对象

d、本地方法栈中引用的对象。

3、对象的回收步骤

a、第一次筛选:对象被标记为不可达

b、第二次筛选:是否需要执行finalize,如果需要执行则移入执行队列中等待执行。当执行finalize时如果对象被重新引用,则移除不可达的标记。如果没有重新引用则将大概率被回收。

猜你喜欢

转载自blog.csdn.net/jiangxuexuanshuang/article/details/88382490