四种引用类型及引用队列

本文目录

1 强引用(StrongReference)

2 软引用(SoftReference)

3 弱引用(WeakReference)

4 幽灵引用/虚引用(PhantomReference)

5 引用队列(ReferenceQueue)

 

1 强引用(StrongReference)

效果:存在强引用的对象,不会被JVM回收。

// 强引用
String str = new String("Reference");

 

回收:当所有的强引用都断开后,在JVM进行垃圾回收时,该对象会被回收。

// 置空
obj = null;

// 指向另一对象
obj= newObject();

 

2 软引用(SoftReference)

效果:存在软引用的对象,在内存不足时,才会被JVM回收。

应用:缓存数据,提高数据的获取速度。

// 软引用:缓存数据
SoftReference<String> sr = new SoftReference<String>(new String("CacheData"));

// 获取数据
String str = sr.get();

// 断开强引用
str= null;

 

3 弱引用(WeakReference)

效果:存在弱引用的对象,每次JVM进行垃圾回收时,该对象都会被回收。

应用:短时间缓存某些次要数据。

// 弱引用
WeakReference<String> wr = new WeakReference<String>(new String("CacheData"));

// 获取数据
String str = wr.get();

// 断开强引用
str= null;
 
// 弱引用Map
WeakHashMap<String, String> whm = new WeakHashMap<String,String>();

 

4 幽灵引用/虚引用(PhantomReference)

效果:相当于无引用,使对象无法被使用,必须与引用队列配合使用。

应用:使对象进入不可用状态,等待下次JVM垃圾回收,从而使对象进入引用列队中。

// 引用队列
ReferenceQueue<String> rq = new ReferenceQueue<String>();

// 幽灵引用
PhantomReference<String> pr = new PhantomReference<String>(new String(""), rq);

// 永远为null(幽灵引用相当于无引用)
System.out.println(pr.get());

 

5 引用队列(ReferenceQueue)

效果:引用队列可以配合软引用、弱引用及幽灵引用使用,当引用的对象将要被JVM回收时,会将其加入到引用队列中。

应用:通过引用队列可以了解JVM垃圾回收情况。

// 引用队列
ReferenceQueue<String> rq = new ReferenceQueue<String>();
 
// 软引用
SoftReference<String> sr = new SoftReference<String>(new String("Soft"), rq);
// 弱引用
WeakReference<String> wr = new WeakReference<String>(new String("Weak"), rq);
// 幽灵引用
PhantomReference<String> pr = new PhantomReference<String>(new String("Phantom"), rq);
 
// 从引用队列中弹出一个对象引用
Reference<? extends String> ref = rq.poll();

 

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值