首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >引用级别

引用级别

作者头像
潇洒
发布2019-06-28 10:45:46
6470
发布2019-06-28 10:45:46
举报
文章被收录于专栏:石头岛石头岛

引用级别 意义:用来标记对角是否可以被回收 级别: 强 > 软 > 弱 > 虚

1.强引用

即一般普通的引用。 如果一个对象是强引用,绝对不会被回收,即使内存空间不足也不会被回收,而是抛 OutOfMemoryError 异常使程序终止。 例1:

String str = "abc";
List<String> list = new Arraylist<String>();
list.add(str);

在list集合里的数据不会释放,即使内存不足也不会

例2:

Object obj = new Object();

//可直接通过obj取得对应的对象 如obj.equels(new Object()); 而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这是经常用到的编码形式。

2.软引用

非必须引用,如果空间不足就会被GC回收。换句话说,在内存溢出之前进行回收。 只要没有被回收,该对象就可能被程序使用。软引用可用来实现内存敏感的高速缓存。 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引用队列中。

public void testSofeReference() {
    Object obj= new Object();
    SoftReference<Object> softReference = new SoftReference<Object>(obj);
    obj = null;
    System.out.println(softReference.get());        //有时候会返回 null
    System.out.println(softReference.isEnqueued()); //返回时否被 GC 回收的标记
}

这时候 softReference 是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null; 软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。

3.弱引用

第二次圾垃回收时,被回收

4.虚引用

垃圾回收时回收,无法通过引用取到对象值

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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