zoukankan      html  css  js  c++  java
  • 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: 引用队列,用于保存被回收后对象的引用

  • 相关阅读:
    项目中docker swarm实践
    Spring的分模块开发的配置
    单点登录
    在服务器搭建git服务器
    Learn Git Lesson06
    kafka Poll轮询机制与消费者组的重平衡分区策略剖析
    gulp初体验
    vue-cli3中axios如何跨域请求以及axios封装
    vue-cli3中怎么配置vue.config.js文件
    svn的下载与安装,使用,包教包会!!!
  • 原文地址:https://www.cnblogs.com/hujingnb/p/10181674.html
Copyright © 2011-2022 走看看