• 强引用、软引用、弱引用、虚引用——4中引用的理解


    1.强引用(Reference):默认使用的就是强引用,不会被GC,即使报OOM也不会被GC

    Object o = new Object();//默认就是强引用,一般使用这种

    2.软引用(SoftReference):当内存不够时,才能被GC回收,内存足够是不会被回收

    3.弱引用(WeakReference):不管内存够不够,只要GC就会被回收,事例如下

    public static void main(String[] args) {
            Object o = new Object();
            WeakReference reference = new WeakReference(o);
            System.out.println(reference.get());
    
            System.out.println("===================");
            o = null;//给o赋值为空,目的是使上面new出来的Object对象除了弱引用以外没有其他引用
            System.gc();
            System.out.println(reference.get());
    }

    打印结果:

    Connected to the target VM, address: '127.0.0.1:56868', transport: 'socket'
    java.lang.Object@35851384
    ===================
    null
    Disconnected from the target VM, address: '127.0.0.1:56868', transport: 'socket'

    可以看出,只要GC,弱引用类的对象就会被回收

    弱引用中,可以牵扯出WeakHashMap,这个map的key具有弱的特性,只要GC,key就会被回收,对应的entry就会被移除

    4.虚引用(PhantomReference):形同虚设,不管有没有GC,get()方法总是取不到值,一般要和引用队列(ReferenceQueue)连用,在GC时,系统会先将PhantomReference丢进队列里,监控对象回收情况(也只有这么点作用)

    总结:软、弱引用一般用在内存作为缓存中,Mybatis缓存的底层就是用的软引用

  • 相关阅读:
    Qt中的标准对话框之QMessageBox
    OpenCV相机标定坐标系详解
    typedef定义数组类型
    导出csv文件(使用a标签)
    获取过去某个时刻时间戳
    查看有没有绑这个host
    $.param()序列化对象
    推荐一个好用的模版引擎工具
    node定时任务
    使用vscode打断点
  • 原文地址:https://www.cnblogs.com/yayin/p/14220436.html
Copyright © 2020-2023  润新知