java 中的强引用、软引用、弱引用、虚引用

强引用

强引用就是最普通的引用,只要一个对象存在一个强引用,就证明它还活着,它就不能被垃圾回收器回收

 

软引用

软引用存在的意义是什么呢?

对于如下场景,我们想实现一个本地缓存,但是如果在短时间内有大量对象被放入了缓存会发生什么问题呢?内存溢出。

那我们怎么解决这个问题呢?如果能在内存溢出前把缓存的对象给回收了就好了。

对,但怎么实现这一机制呢?嗯,加个软引用吧,我们就把软引用定义成平时不回收,内存溢出前可以被回收的引用类型。

对,软引用就这么出来了。

 

弱引用

我的机器内存很敏感,我想让缓存的对象平时也可以被回收,但它没被回收前我还可以通过一个引用访问到它,该怎么实现呢?

。。。算了,再加个弱引用吧。

 

虚引用

我想监控一下我创建的对象被 jvm 垃圾回收的情况,用 finalize 太影响 GC 性能,有没有更好的方法呢?

要是垃圾回收时,回收了那个对象,然后就给我发个消息,说这个对象被回收了哈,该收尸的赶紧来收尸,但我还是照样回收它就好了?

那我们增加个虚引用好了,只不过得到虚引用时对象已经被回收了,所以通过虚引用就访问不到了,但能得到这个对象被回收的消息就好了,其他的也不在乎了。

 

总结

强软弱虚,引用强度依次减弱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值