首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    WeakHashMap

    WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值, 见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap 出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于 但是如果预先生成了WeakHashMap,而在GC以前又不曾访问该WeakHashMap,那不是就不能释放内存了吗? ; i++) { WeakHashMap<byte[][], byte[][]> d = new WeakHashMap<byte[][], byte[][]>(); d.put(new WeakHashMap 去处理 ReferenceQueue 所以 WeakReference 包装的key依然存在在WeakHashMap中,其对应的value也当然存在。

    54510编辑于 2022-09-05
  • 来自专栏全栈程序员必看

    WeakHashMap

    .*; public class WeakHashMapTest { public static void main(String[] args) { WeakHashMap whm = new WeakHashMap(); //HashMap whm = new HashMap(); // 将WeakHashMap中添加三个key-value对, // 三个key都是匿名字符串对象 whm.put(new String("数学") , new String("及格")); whm.put(new String("英文") , new String("中等")); //将 WeakHashMap {java=中等, 英文=中等, 数学=及格, 英语=优秀} {java=中等, 英文=中等, 数学=及格, 英语=优秀} 三 结果分析 如果WeakHashMap对象的 key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对象。

    23710编辑于 2022-09-04
  • 来自专栏全栈程序员必看

    weakHashMap用法

    WeakHashMap,此种Map的特点是: 当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值, 举例来说:声明了两个Map对象,一个是HashMap,一个是WeakHashMap ,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。 出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于 b对象虽然指向了null,但HashMap中还有指向b的指针,所以 WeakHashMap将会保留 总结来说: WeakHashMap并不是你啥也不干他就能自动释放内部不用的对象的,而是在你访问它的内容的时候释放内部不用的对象

    27720编辑于 2022-09-03
  • 来自专栏全栈程序员必看

    WeakHashMap理解

    二、为什么需要WeakHashMap WeakHashMap正是由于使用的是弱引用,因此它的对象可能被随时回收。 2、WeakHashMap中的Entry被GC后,WeakHashMap是如何将其移除的? 通过上面的分析,存储在WeakHashMap中的key随时都会面临被回收的风险,因此每次查询WeakHashMap时,都要确认当前WeakHashMap是否已经有key被回收了。 如果存放在WeakHashMap中的key都存在强引用,那么WeakHashMap就会退化成HashMap。 如果在系统中希望通过WeakHashMap自动清除数据,请尽量不要在系统的其他地方强引用WeakHashMap的key,否则,这些key就不会被回收,WeakHashMap也就无法正常释放它们所占用的表项

    68720编辑于 2022-09-04
  • 来自专栏XINDOO的专栏

    Java WeakHashMap

      作为一个java开发者肯定都知道且使用HashMap,但估计大部分人都不太知道WeakHashMap。 那么既然jdk已经提供了HashMap,为什么还要再提供一个WeakHashMap呢? 黑格尔曾经说过,存在必合理,接下来我们来看下为什么有WeakHashMap。    HashMap,但WeakHashMap也有一些自己的缺陷。 但WeakHashMap没有相应的优化,有点像jdk8之前的HashMap版本。 如果即想用WeakHashMap的功能,也想用ReferenceQueue,貌似得自己实现一套新的WeakHashMap了。 用途   这里列举几个我所知道的WeakHashMap的使用场景。

    77620发布于 2021-01-22
  • 来自专栏全栈程序员必看

    浅谈WeakHashMap

    Java WeakHashMap 到底Weak在哪里,它真的很弱吗?WeakHashMap 的适用场景是什么,使用时需要注意些什么?弱引用和强引用对Java GC有什么不同影响? 总体介绍 在Java集合框架系列文章的最后,笔者打算介绍一个特殊的成员:WeakHashMap,从名字可以看出它是某种 Map。 它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。 WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢? 将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用。

    49920编辑于 2022-09-06
  • 来自专栏云计算运维

    浅谈WeakHashMap

    总体介绍 在Java集合框架系列文章的最后,笔者打算介绍一个特殊的成员:WeakHashMap,从名字可以看出它是某种 Map。 它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。 WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢? 将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用。 具体实现 WeakHashMap的存储结构类似于HashMap,读者可自行参考前文,这里不再赘述。 关于强弱引用的管理方式,博主将会另开专题单独讲解。 Weak HashSet?

    41430发布于 2021-07-21
  • 来自专栏全栈程序员必看

    weakHashMap 用法

    WeakHashMap,此种Map的特点是: 当除了自身有对key的引用外,此key没有其他引用,那么GC之后此map会自动丢弃此值 当使用 WeakHashMap 时,即使没有显示的添加或删除任何元素 举例来说:声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap 出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于 WeakHashMap 内部是通过弱引用来管理entry的,弱引用的特性对应到 WeakHashMap 上意味着什么呢? 将一对key, value放入到 WeakHashMap 里并不能避免该key值被GC回收,除非在 WeakHashMap 之外还有对该key的强引用。

    41310编辑于 2022-08-23
  • 来自专栏技术小黑屋

    浅析WeakHashMap

    更高级一点,我们可能会使用WeakHashMapWeakHashMap其实和HashMap大多数行为是一样的,只是WeakHashMap不会阻止GC回收key对象(不是value),那么WeakHashMap是怎么做到的呢,这就是我们研究的主要问题。 在开始WeakHashMap之前,我们先要对弱引用有一定的了解。 其中Key作为了WeakReference指向的对象 因此WeakHashMap利用了WeakReference的机制来实现不阻止GC回收Key 如何删除被回收的key数据呢 在Javadoc中关于WeakHashMap }") } 我们按照如下操作 点击fab控件,每次对WeakhashMap对象增加一个Entry,并打印WeakHashMap的size 执行3此 在没有强制触发GC时,WeakHashMap对象size

    1.1K20发布于 2018-09-05
  • 来自专栏Android开发经验分享

    WeakHashMap源码解析

    转载请以链接形式标明出处: 本文出自:103style的博客 base on jdk_1.8.0_77 目录 WeakHashMap简介 WeakHashMap的全局变量介绍 WeakHashMap 的构造函数 WeakHashMap相关的函数 小结 参考文章 ---- WeakHashMap简介 WeakHashMap 继承于AbstractMap,实现了Map接口。 在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。 实现步骤是: 新建WeakHashMap,将“键值对”添加到WeakHashMap中。 这就是“弱键”如何被自动从WeakHashMap中删除的步骤了。 和 HashMap 一样,WeakHashMap是不同步的。

    26220编辑于 2022-12-19
  • 来自专栏Java程序猿部落

    WeakHashMap,源码解读

    不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是数组+单链表。 此外,WeakHashMap与HashMap最大的不同之处在于,WeakHashMap的key是“弱键”(weak keys),即当一个key不再正常使用时,key对应的key-value pair将自动从 我们说WeakHashMap的key是weak-keys,即是说这个Map实现类的key值都是弱引用。 底层实现 先来看一下WeakHashMap的定义: public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map 在WeakHashMap定义的增、删、改、查方法中,都要调用该方法。

    1K30发布于 2019-09-10
  • 来自专栏Java基础

    【集合框架WeakHashMap

    一、WeakHashMap 是什么?为什么需要它? 而 WeakHashMap 的设计目标就是解决这个问题: ✅ 当键(key)不再被外部强引用时,即使 WeakHashMap 本身还存在,该键值对也会被自动清除。 典型使用场景 ✅ 场景一:内存敏感的缓存 WeakHashMap<ExpensiveObject, Metadata> cache = new WeakHashMap<>(); 当 ExpensiveObject ✅ 场景二:为对象附加元数据(如 AOP、序列化) WeakHashMap<Object, MyMetadata> metadataMap = new WeakHashMap<>(); 即使 Object 五、线程安全与并发访问 WeakHashMap 不是线程安全的。

    30110编辑于 2025-08-28
  • 来自专栏全栈程序员必看

    WeakHashMap的原理

    简介 WeakHashMap和HashMap一样,WeakHashMap也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以为null。 Map.Entry<K,V>,即Entry实现了WeakReference类),当WeakHashMap某个键不再正常使用时,会被从WeakHashMap自动删除。 因此,WeakHashMap使用了弱引用作为内部数据的存储方案,,WeakHashMap可以作为简单缓存表的解决方案,当系统内存不足时,垃圾收集器会自动的清除没有在任何其他地方被引用的键值对。 如果需要用一张很大的Map作为缓存表时,那么可以考虑使用WeakHashMap。 在WeakHashMap实现中,借用了ReferenceQueue这个“监听器”来保存被GC回收的”弱键”,然后在每次使用WeakHashMap时,就在WeakHashMap中删除ReferenceQueue

    40120编辑于 2022-09-02
  • 来自专栏全栈程序员必看

    WeakHashMap,源码解读

    不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是数组+单链表。 此外,WeakHashMap与HashMap最大的不同之处在于,WeakHashMap的key是“弱键”(weak keys),即当一个key不再正常使用时,key对应的key-value pair将自动从 我们说WeakHashMap的key是weak-keys,即是说这个Map实现类的key值都是弱引用。 底层实现 先来看一下WeakHashMap的定义: public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map 在WeakHashMap定义的增、删、改、查方法中,都要调用该方法。

    53210编辑于 2022-09-03
  • 来自专栏全栈程序员必看

    Java中的WeakHashMap

    WeakHashMap的这种特性比较适合实现类似本地、堆内缓存的存储机制——缓存的失效依赖于GC收集器的行为 WeakHashMap的定义如下: public class WeakHashMap<K,V WeakHashMap跟普通的HashMap不同,WeakHashMap的行为一定程度上基于垃圾收集器的行为,因此一些Map数据结构对应的常识在WeakHashMap上会失效——size()方法的返回值会随着程序的运行变小 出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于 利用WeakHashMap实现内存缓存 可以看出,WeakHashMap的这种特性比较适合实现类似本地、堆内缓存的存储机制——缓存的失效依赖于GC收集器的行为。 WeakHashMap非常适合使用在这种场景下,下面的代码演示了具体的实现: WeakHashMap<UniqueImageName, BigImage> map = new WeakHashMap<>

    39120编辑于 2022-08-23
  • 来自专栏全栈程序员必看

    java weakhashmap_解析WeakHashMap与HashMap的区别详解

    WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值, 见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap 出现这个状况的原因是,对于a对象而言,当HashMap remove掉并且将a指向null后,除了WeakHashMap中还保存a外已经没有指向a的指针了,所以WeakHashMap会自动舍弃掉a,而对于 但是如果预先生成了WeakHashMap,而在GC以前又不曾访问该WeakHashMap,那不是就不能释放内存了吗? 果不其然,WeakHashMap这个时候并没有自动帮我们释放不用的内存。 WeakHashMap 去处理 ReferenceQueue 所以 WeakReference 包装的key依然存在在WeakHashMap中,其对应的value也当然存在。

    85710编辑于 2022-08-23
  • 来自专栏全栈程序员必看

    WeakHashMap初探「建议收藏」

    1、特点: 随着时间的推移,其中的元素会被垃圾回收器回收 2、涉及到的4中引用: 强引用:(StrongReference) 就是指在程序代码之中普遍存在的,例如以下代码:

    24620编辑于 2022-08-23
  • 来自专栏涤生的博客

    WeakHashMap垃圾回收原理

    介绍 WeakHashMap自然联想到的是HashMap。确实,WeakHashMap与HashMap一样是个散列表,存储内容也是键值对。 与HashMap类似的功能就不展开了,本文重点关注在WeakHashMap是如何做到回收数据? 垃圾回收原理 谈WeakHashMap回收原理得从WeakReference(弱引用)说起。 queue是WeakHashMap中创建的ReferenceQueue。 误区 是不是使用了WeakHashMap就一定没有问题了呢? 总结 了解了WeakHashMap原理之后,使用起来是不是更加得心应手了呢。

    50320发布于 2018-08-14
  • 来自专栏全栈程序员必看

    Java集合之WeakHashMap

    WeakHashMap继承于AbstractMap,同时实现了Map接口。 实现的步骤: (1)新建WeakHashMap,将键值对添加到WeakHashMap中,WeakHashMap同样也是通过table保存Entry(键值对),每一个Entry实际上是一个单向链表 WeakHashMap也不是线程安全的。 WeakHashMap的关系图: (1)WeakHashMap继承于AbstractMap,并且实现了Map接口。 (2)WeakHashMap是哈希表,它的键时弱键,WeakHashMap同样有几个重要的成员变量:table,size,threshold,loadFactor,modCount,queue。 size:1 基于Java8的WeakHashMap源代码: public class WeakHashMap<K,V> extends AbstractMap<K,V>

    81120编辑于 2022-09-04
  • 来自专栏bit哲学院

    Java中的WeakHashMap

    参考链接: Java WeakHashMap 楔子  WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,所以比较适合做缓存。  WeakHashMap的这种特性比较适合实现类似本地、堆内缓存的存储机制——缓存的失效依赖于GC收集器的行为  WeakHashMap的定义如下:  public class WeakHashMap<K WeakHashMap跟普通的HashMap不同,WeakHashMap的行为一定程度上基于垃圾收集器的行为,因此一些Map数据结构对应的常识在WeakHashMap上会失效——size()方法的返回值会随着程序的运行变小 WeakHashMap非常适合使用在这种场景下,下面的代码演示了具体的实现:  WeakHashMap<UniqueImageName, BigImage> map = new WeakHashMap< 参考文献  WeakHashMap的使用场景Java中的WeakHashMap

    64630发布于 2021-04-26
领券