美文网首页JavaJava 核心技术
JVM垃圾回收引用计数法和根搜索算法

JVM垃圾回收引用计数法和根搜索算法

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-12-13 07:42 被阅读0次

    引用计数法(不推荐使用)

    • 可回收对象

    a、没有被引用的对象:A
    b、没有互相应用的对象:BCD

    • 缺陷

    循环依赖对象不可回收:EF

    ReferenceCountingGC objA = new ReferenceCountingGC();
    ReferenceCountingGC objB = new ReferenceCountingGC();
    objA.instance=objB;
    objB.instance=objA;
    objA=null;
    objB=null;
    

    根搜索算法(GCRoots,也叫可达性算法,不推荐直接使用)

    • 可回收对象

    灰色背景部分

    • 可作为GCRoots的对象包括

    (1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。
    (2). 方法区中的类静态属性引用的对象。
    (3). 方法区中常量引用的对象。
    (4). 本地方法栈中JNI(Native方法)引用的对象。

    • 为什么jvm不直接使用gc root去回收整个堆呢

    因为效率太低了,我们99.99%的对象基本存活不到3s

    根搜索算法代码演示

    1.测试代码

    // 加入list中
    ArrayList<Object> jaryes = new ArrayList<Object>();
    jaryes.add("jarye");
    jaryes.add("test");
    System.out.println("存储成功..");
    /***暂停打印堆信息1***/
    System.in.read();
    // 引用内存地址变为空
    jaryes = null;
    System.out.println("jaryes变为null");
    /***暂停打印堆信息2***/
    System.in.read();
    System.in.read();
    System.out.println("end");
    

    2.堆信息导入到Eclipse Memory Analyzer工具

    • 根节点信息


    • 堆信息1


    • 堆信息2


    相关文章

      网友评论

        本文标题:JVM垃圾回收引用计数法和根搜索算法

        本文链接:https://www.haomeiwen.com/subject/xfzhgktx.html