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

强引用

普通的new一个对象比如,Object obj = new Object(),obj就是强引用,一个对象只要被强引用指向,那么这个对象就不会被回收。

软引用

软引用相对强引用要弱化一些,当对象有弱引用而无强引用关联时,当内存空间足够的时候,垃圾回收器不会回收它。适合用在缓存的应用场景中,如果内存充足,则可以缓存业务数据,如果内存不够则可以将其指向的对象回收。

弱引用

在垃圾回收时,如果这个对象只被弱引用关联(没有任何强引用关联他),不管内存空间是否有空闲,都会被回收。弱引用同样可以应用在很多需要缓存的场景。(ThreadLocal类中的ThreadLocalMap使用的弱引用来作为key)

虚引用

虚引用和弱引用对关联对象的回收都不会产生影响,如果只有虚引用活着弱引用关联着对象,那么这个对象就会被回收。不同的是无法通过虚引用来获取一个对象的实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。所以虚引用必须配合ReferenceQueue使用,来接收通知,监视对象状态。

ReferenceQueue:有对象即将被回收,那么相应的reference对象就会被放到这个queue里,这也就意味着,该对象的引用一旦被放入到referencequeue,就表明该对象即将被回收了。

总结一览

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值