• JVM 垃圾回收 引用类型


    判断对象可否回收

    引用计数算法

    • 过程:给对象添加一个引用计数器,每当被引用时,计数器值加一;引用失效时,值减一。当计数器值为0时,该对象就不会再被使用。

    • 缺陷:虽然实现起来简单,并且效率也较高,但是**很难解决对象间相互引用的问题。**因此主流Java虚拟机不选用引用计数算法来管理内存。

    可达性分析算法

    Java虚拟机中的垃圾回收器采用可达性分析来探索存活的对象

    • 过程:扫描堆中的对象,沿着**GC Roots对象为起点的引用链**上是否有该对象,如果没有,说明该对象可以被回收

    引用类型

    1.强引用 2.软引用 3.弱引用 4.虚引用 5.终结器引用

    1.强引用

    代码中普遍存在(最常见)的引用方式。

    特点:被强引用关联的对象不会被回收

    Object obj = new Object()
    
    • 1
    2.软引用

    特点:被软引用关联的对象只有在内存不够的情况下才会被回收。

    使用 SoftReference类来创建软引用。

    Object obj = new Object();
    SoftReference<Object> sf = new SoftReference<Object>(obj);
    obj = null;  // 使对象只被软引用关联
    
    • 1
    • 2
    • 3
    3.弱引用

    特点:被弱引用关联的对象一定会被回收,也就是说它只能存活到下一次垃圾回收发生之前。

    使用WeakReference类来实现弱引用。

    Object obj = new Object();
    WeakReference<Object> wf = new WeakReference<Object>(obj);
    obj = null;
    
    • 1
    • 2
    • 3
    4.虚引用

    又称为幽灵引用或者幻影引用。

    特点:一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用取得一个对象。

    为一个对象设置虚引用关联的唯一目的就是能在这个对象被回收时收到一个系统通知。

    使用PhantomReference类来实现虚引用。

    Object obj = new Object();
    PhantomReference<Object> pf = new PhantomReference<Object>(obj);
    obj = null;
    
    • 1
    • 2
    • 3

    在这里插入图片描述

  • 相关阅读:
    为什么都说考完二建就要去准备一建,这几点你一定不知道!
    OWASP Top 10 2022 介紹
    R可视化:分组频率分布直方图和密度图
    js_typeof关键字和比较运算符
    cba新闻查询易语言代码
    现代概率论的内容
    xxl-job中多节点分片的时候如何在linux服务器开启多个执行器实例?
    nginx的正向代理,反向代理和负载均衡
    android灰色滤镜布局
    MySQL数据库管理(二)
  • 原文地址:https://blog.csdn.net/weixin_47869348/article/details/126897104