前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强、软、弱、虚引用

强、软、弱、虚引用

作者头像
CBeann
发布2023-12-25 18:03:11
1040
发布2023-12-25 18:03:11
举报
文章被收录于专栏:CBeann的博客CBeann的博客

强引用

当内存不足时,JVM开始垃圾回收,对于强引用的对象,就算是OOM也不会回收。

95%中都是强引用,如下所示

代码语言:javascript
复制
Object obj=new Object();

软引用

软引用是一种相对强引用弱化了一些的引用,需要用java.lang.ref.SoftReference类来实现。

当系统内存充足时,他不会被回收;当系统内存不足时,他会回收。

当内存充足时,他不会被回收

代码语言:javascript
复制
public static void main(String[] args) {

    // 强引用
    Object obj = new String("hello");
    // 软引用
    SoftReference softReference = new SoftReference(obj);
    obj = null;
    System.gc();
    System.out.println(obj); // null
    System.out.println(softReference.get()); // hello
  }

当内存不时,他会被回收

代码语言:javascript
复制
// -Xmx5m -Xms5m
  public static void main(String[] args) {

    // 强引用
    Object obj = new String("hello");
    // 软引用
    SoftReference softReference = new SoftReference(obj);
    obj = null;
    try {
      byte[] data = new byte[5 * 1024 * 1024];
    } catch (Exception e) {
    } finally {
      System.out.println(obj); // null
      System.out.println(softReference.get()); // null
    }
  }

弱引用

对于弱引用的对象来说,只要GC,不管JVM的内存空间是否足够,都会回收该对象占用的内存

代码语言:javascript
复制
public static void main(String[] args) {

    // 强引用
    Object obj = new String("hello");
    // 弱引用
    WeakReference weakReference = new WeakReference(obj);

    obj = null;
    System.gc();
    System.out.println(weakReference.get());
  }
WeakHashMap
代码语言:javascript
复制
public static void main(String[] args) {

    Map map=new WeakHashMap();
    Integer key= new Integer(1);
    String value = "hashMap";
    map.put(key, value);
    key=null;
    System.gc();
    System.out.println(map);//{}
  }

只所以一GC,WeakHashmap中的数据就会清空,因为

代码语言:javascript
复制
WeakHashmap.中的Entry是
Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V>

虚引用

虚引用的作用主要跟踪对象垃圾回收的状态。

其中DirectBuffer的释放就是虚引用的使用场景。

代码语言:javascript
复制
ByteBuffer buffer = ByteBuffer.allocateDirect(16);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 强引用
  • 软引用
  • 弱引用
    • WeakHashMap
    • 虚引用
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档