如何理解JVM中四大引用,强引用、软引用、弱引用、虚引用

强引用
使用new方法创造出来的对象,默认都是强引用。GC的时候,就算内存不够,抛出OutOfMemoryError也不会回收对象,死了也不回收

软引用
需要用Object.Reference.SoftReference来显示创建。如果内存够,GC的时候不回收。内存不够,则回收。常用于内存敏感的应用,比如高速缓存

弱引用
需要用Object.Reference.WeakReference来显示创建。无论内存够不够,GC的时候都回收,也可以用在高速缓存上

虚引用
软应用和弱引用可以通过get()方法获得对象,但是虚引用不行。虚引用形同虚设,在任何时候都可能被GC,不能单独使用,必须配合引用队列(ReferenceQueue)来使用。设置虚引用的唯一目的,就是在这个对象被回收时,收到一个通知以便进行后续操作,有点像Spring的后置通知

引用队列
弱引用、虚引用被回收后,会被放到引用队列里面,通过poll方法可以得到

WeakHashMap
传统的HashMap就算keynull了,也不会回收键值对。但是如果是WeakHashMap,一旦内存不够用时,且keynull时,会回收这个键值对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值