问题标签 [weakhashmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
595 浏览

java - Java WeakHashMap 参考未更新

在下面的代码中,我创建了一个 Pen 对象并将其颜色初始化为白色。在 Pen 的构造函数中,在将字段“penColor”设置为传递给构造函数的值之后,我更新了一个全局静态弱哈希映射,我将其保存在 KEY 是“this 指针”的位置——在我的例子中是 Pen,并且value 是另一个weakhashmap,其KEY 是字符串“penColor”,其值是对penColor 成员字段的引用。

接下来,我的代码通过调用 Pen 的 setColor 函数来更新 Pen 的颜色。我原以为在这次更新之后,如果我在弱哈希图中查找 Pen 对象的颜色字段,它会反映新颜色,但事实并非如此。有人可以解释为什么会这样吗?

0 投票
7 回答
20329 浏览

java - WeakHashMap 是否有 java.util.concurrent 等价物?

Collections.synchronizedMap()可以在不使用同时保持并发正确性的情况下重写以下代码吗?

即有没有来自 java.util.concurrent 的东西可以用来代替?请注意,仅替换为

显然行不通

0 投票
2 回答
672 浏览

java - 使用 Wea​​kHashMap 减少内存使用

WeakHashMap.html的 Javadoc 中,它说

“WeakHashMap 中的每个键对象都间接存储为弱引用的引用。因此,只有在映射内部和外部的弱引用已被垃圾收集器清除后,才会自动删除键。”

进而

请注意,值对象可以通过 WeakHashMap 本身间接引用其键;也就是说,一个值对象可以强引用某个其他键对象,其关联的值对象反过来又强引用第一个值对象的键。

但是在 WeakHashMap 中不应该同时使用 Key 和 Value 的弱引用吗?即如果内存不足,GC 将释放值对象持有的内存(因为在大多数情况下,值对象很可能比键对象占用更多的内存)?

如果 GC 释放 Value 对象,Key 对象也可以释放吗?

基本上,我正在寻找一个 HashMap,它可以在内存不足时减少内存使用量(GC 会在必要时收集值和键对象)。

在Java中可能吗?

谢谢你。

0 投票
4 回答
1625 浏览

java - 如何知道与 WeakHashMap 中已删除条目相关联的值

我有这样的事情:

MyObj1当 GC 发挥作用并且没有强引用它时,key 可能会被删除。

我想传递给与checkThis(MyObj2)被删除的键关联的特定映射值对象(也许检查一个ReferenceQueue?)

我无法弄清楚如何将其放入代码中。

0 投票
4 回答
1847 浏览

java - 有人可以向我解释何时使用 MapMaker 或 WeakHashMaps 有用吗?

我读过很多人非常喜欢 Google Guava(Collections)的MapMaker,但是我看不出它有什么好的用途。

我已经阅读了 javadoc,它说它的行为类似于ConcurrentHashMap。它还说new MapMaker().weakKeys().makeMap()几乎总是可以用作WeakHashMap的替代品。

但是,阅读ConcurrentHashMapWeakHashMap的 javadocs让我想知道什么时候使用它有用?在我看来,你不能保证你在地图上放的任何东西都会在那里,还是我误解了?

0 投票
1 回答
1995 浏览

java - Guava MapMaker().weakKeys().makeMap() vs WeakHashMap

我们有一个 Scala 服务器,它通过套接字使用协议缓冲区获取节点树,我们需要将附加数据附加到每个节点。

在单线程上下文中并且当节点树和关联数据都将同时删除其强引用时(由于超出范围),是否有任何理由使用 Google Guava 的 MapMaker 和 weakKeys() 而不是使用 Wea​​kHashMap ? 似乎使用 MapMaker,需要为同步访问付费,在这种情况下不需要。

顺便说一句,如果 MapMaker 提供对等价设置的访问权限,这样人们就可以选择引用相等而不关心弱引用或软引用,这将是有用的。

0 投票
2 回答
1264 浏览

java - Java:需要有关 WeakHashMap 的建议

我想我是另一个试图用 Wea​​kHashMap 做某种缓存的人。我需要一些帮助。

我有一堆TrackData包含有关音轨信息的对象。然后有一些Track对象保持对TrackData内部的引用。几个轨道可以指向同一个TrackData。然后我的TrackDataCache课程看起来像这样:

因此,当我加载曲目时,我会调用TrackDataCache.cache(),如果之前未加载其曲目数据,则将其缓存或替换为缓存副本(TrackData覆盖 equals() 方法以检查位置和子歌曲索引)。我想使用弱引用,这样我在删除 Tracks 时就不需要关心了。

我想问在 WeakHashMap 中保持对键的弱引用是否可行,如果不是,我应该如何解决这个问题?我需要弱引用和恒定时间检索缓存值。我正在考虑复制 WeakHashMap 代码并将getEntry()方法公开,这解决了问题,但这是一个糟糕的 hack :(

PS。我知道 apache 或 google 集合可能有这样的东西,但我真的不想添加 2Mb 依赖项。

0 投票
8 回答
101804 浏览

java - 什么是 WeakHashMap 以及何时使用它?

什么是 aWeakHashMap以及何时应该使用它?WeakHashMapa和 a 有什么区别HashMap

0 投票
4 回答
2585 浏览

java - Java Weak Hash Map - 需要根据值的弱点而不是键来删除条目

因此,JavaWeakHashMap允许创建一个映射,如果其键变弱,则删除其条目。但是,当地图中的值变弱时,如何创建一个其条目被删除的地图?我想使用地图的原因是作为一个全局哈希表,它根据对象的 ID 跟踪对象。

(文本字符串在哪里ID

我希望在对象地址变弱时删除键值对,而不是指向它们的字符串。有人对此有任何想法吗?

0 投票
5 回答
2725 浏览

java - WeakHashMap 的 keySet 条目永远不会为空吗?

如果我遍历 WeakHashMap 的键集,是否需要检查空值?

换句话说,WeakHashMap 的元素可以在我迭代它们时被收集吗?

编辑

为了这个问题,可以假设null哈希图中没有添加任何条目。