• Java 控制类的引用类型,合理使用内存


    Java提供了 java.lang.ref包,该包下的类均与垃圾回收机制相关

    先介绍Java对象的集中引用类型

    1.强引用

    强引用是最常见的,创建对象就是强引用,如 String a = new String("1");

    无论系统内存是否紧张,只要该对象还存在强引用就不会被垃圾回收机制回收

    2.软引用

    当系统内存足够时,不会被回收,当系统内存不足时,会将其回收

    3.弱引用

    当垃圾回收机制运行时,总会将其回收

    4.虚引用

    跟踪对象被垃圾回收的状态

    通过检查与虚引用关联的引用队列中是否已经包含指定的虚引用,从而了解虚引用所引用的对象是否即将被回收

    再介绍引用相关的类

    1. SoftReference: 软引用类型,示例如下,
    // 创建软引用类型
    SoftReference<String> sr = new SoftReference<String>(new String("Hello"));
    // 返回对象引用
    String string = sr.get();
    if(string == null){
    // 因为软引用当系统内存紧张时会被回收,所以使用的时候需要判断是否为null
    }
    // 创建数组
    SoftReference<String>[] srs = new SoftReference[100];
    

    2.WeakReference: 弱引用类型,示例如下

    // 创建弱引用类型, 不能使用"Hello",这样系统会缓存这个字符串直接量,使用强引用来引用它
    WeakReference<String> wr = new WeakReference<>( new String("Hello"));
    // 调用弱引用
    String str = wr.get();
    // 因为软引用当运行垃圾回收时会被回收,所以使用的时候需要判断是否为null
    if(str == null){}
    // 强制垃圾回收
    System.gc();
    // 再次调用弱应用,发现已经为null
    System.out.println(wr.get());
    

    3.WeakHashMap<K,V>: 弱引用类型的Map,这个类是 java.util 包下的

    当垃圾回收机制运行时,会清空所有key-value对,除非某些key还有强引用在引用它

    4.PhantomReference: 虚引用类型,类似于没有引用,要和引用队列联合使用

    感觉不怎么用的到,就不举例子了,感兴趣自己查一下

    5.ReferenceQueue: 引用队列,用于保存被回收后对象的引用

  • 相关阅读:
    ubuntu20.04安装python pip
    linux tar包追加问题
    [Linux]主机无法ping通虚拟机,但虚拟机却可以ping通主机
    安装pygraphviz/graphviz报错
    elasticsearch Delete (根据条件删除)
    python2 vs python3的区别汇总
    python实现elasticsearch的update操作,不改变原数据,增加字段,或者查询更新
    python bulk批量保存elasticsearch数据
    python rpc 简单实现自带包xmlrpc
    Python获取当前运行函数的名称、类方法名称
  • 原文地址:https://www.cnblogs.com/hujingnb/p/10181674.html
Copyright © 2020-2023  润新知