• 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

    在这里插入图片描述

  • 相关阅读:
    【VUE项目实战】61、添加页面加载进度条效果
    [全网唯一]通过修改源码使得从ZIP提取文件并在提取时进行重命名保存(博客园同步发布)
    kubernetes网络模型
    库函数的使用和模拟实现
    EasyExcel listener无法通过Autowired注入xxMapper
    关闭jenkins插件提醒信息
    区别Vue 2.0 和 Vue 3.0
    MySQL-触发器
    OpenAI首席科学家:ChatGPT已经出现意识,人类未来将与AI融合
    jmeter数据库操作(执行多条sql语句)
  • 原文地址:https://blog.csdn.net/weixin_47869348/article/details/126897104