Java中的WeakHashMap概念原理以及简单案例
WeakHashMap 概念和原理说明
WeakHashMap使用了软引用结构,它的对象在垃圾回收时会被删除
注:垃圾回收是优先级非常低的线程,不能被显示调用,当内存不足的时候会启用
下面是 WeakHashMap 的实现原理拆分:
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V> { ... ... // 用于存储需要清理的引用对象 private final ReferenceQueue<Object> queue = new ReferenceQueue<>(); ... ... // 内部Entry继承自WeakReference,从而有弱引用特性 private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> { ... ... } ... ... // 用于移除内部不用的Entry来释放内存 private void expungeStaleEntries() { ... ... } ... ... }
WeakHashMap 原理说明
1.每次GC清理对象后,引用对象被放置到 ReferenceQueue 之中
2.每次访问 WeakHashMap 都会调用 expungeStaleEntries 遍历删除 ReferenceQueue 中引用对象
使用案例
1、缓存中使用
由于 WeakHashMap 是弱引用,因此适合在缓存中使用,当内存不足GC的时候,会清理不用的引用达到释放内存的目的
2、不要使用基础类型作为WeakHashMap的key
我大概理解的是,基础类型的一定范围不会被回收 原文:objectMap.put方法执行的时候i会被封装为Integer类型的,Integer保留了-128到127的缓存。
但是对于int来说范围大很多,因此那些Key <= 127的Entry将不会进行自动回收,但是那些大于127的将会被回收,因此最后的尺寸总是会稳定在128左右
到此这篇关于Java中的WeakHashMap概念原理以及简单案例的文章就介绍到这了,更多相关Java中的WeakHashMap内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
使用idea生成springboot程序的docker镜像的操作指南
这篇文章给大家详细的介绍了使用idea生成springboot程序的docker镜像的操作指南,文中通过图文结合给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下2023-12-12
最新评论