java中的引用(强引用,软引用,弱引用,虚引用)

1.强引用(StrongReference)
最常见的引用,实现也很简单

Object o = new Object();

特点:强引用对象是个倔脾气,在JVM停止运行时才会终止,不然就算是置为null,甚至是OOM了也不会被GC

2.软引用
先说一下为什么要使用软引用,实际工作中可能会有这样的场景:我们需要查询我们之前几分钟的时间中查询的数据,一般来说,想快速获取到这些数据的话,需要把这些数据放在内存中,然而内存容量是有限的,如果一直这样存储,显然是不行的。这个时候软引用就派上用场了,在内存空间不足的时候,软引用对象会自动被回收。
实现代码:

SoftReference obj = new SoftReference(object);
object = null; 
System.gc(); 
obj.get();

特点:
内存充足,不回收
内存不足,回收

3.弱引用
同样的,这里我先解释一下为什么要使用弱引用。之前提到了使用软引用是为了解决OOM的问题,现在我们思考另一个场景。现在我们有一个Object o,然后将其作为key放入到HashMap中,当我们把o置为null时,o并不能被回收,因为其还被HashMap所引用,然而实际上我们已经不需要这个o了,这时候使用弱引用就能解决这个问题
实现代码:

Object obj = new Object();
WeakReference wf = new WeakReference(obj);
obj = null;
wf.get();//有时候会返回null
wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾

特点:与内存无关,当对象被置为null时,才会被GC回收。

4.虚引用
又名幻想引用,这个引用也非常好理解,这种类型的引用,不管内存是否充足,不管对象是否被置为null,只要GC,那就回收。
实现代码:

Object obj = new Object();
PhantomReference pf = new PhantomReference(obj);
obj=null;
pf.get();//永远返回null
pf.isEnQueued();//返回是否从内存中已经删除

特点:垃圾回收必定回收
用途:常用于检测对象是否从内存中删除

之前看到过一个特别有意思的总结:
强引用就像是大老婆,关系稳固
软引用就像是二老婆,可能失宠
弱引用就像是情人,关系不稳固,可能跟别人跑了
虚引用就像是女神,只能在梦里想想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值