WeakHashMap

参考了网上不少的文章,总结如下:
WeakHashMap实现大部分与1.7版本的HashMap相同,但WeakHashMap中的Entry继承了WeakReference,key为弱引用。
弱引用对象在发生GC时会被回收,因此key被回收后会进入到ReferenceQueue中,注意这里回收的其实只是key,value没有被回收。
WeakHashMap的get()、put()等方法都直接或间接调用了expungeStaleEntries()方法,这个方法会从ReferenceQueue中拿到被回收掉的key,然后去遍历清除对应的值,帮助GC回收value。
对于HashMap,当kye为null时其hash为0,固定位置为table[0],而在WeakHashMap中null会被包装成static object NULL_KEY = new Object(),会正常的求hash等操作,由于NULL_KEY 是静态不在GC范围内,因此不会被回收,所以key为null的必须手动通过remove()来删除。

参考文献:
并发编程网
朱小厮的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值