问题标签 [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 投票
3 回答
6639 浏览

java - java中的内存缓存对象

我想在内存中缓存对象。要求如下:

  1. 每个记录/对象都与一个唯一键相关联。
  2. 要存储 400-500 条记录/对象。如果记录数增加超过指定限制,则应逐出较旧的记录。
  3. 记录的存储时间不应超过 2 分钟。
  4. 当 JVM 内存不足时(一种弱引用)应该缩小。
  5. 不能使用第三方库,因为它是一个小模块,目的只是减少不必要的网络访问。
  6. 写入更多,读取更少

这里的安全性也是一个问题,因为我们要缓存一些敏感数据。这些数据将被缓存在内存中。我真的应该担心安全性并加密数据吗?

我正在寻找一个提供类似功能的 Java 类。

目前我正在考虑扩展WeakHashMap和实施各种私有/公共方法以符合要求。

如果您有任何其他想法,请在这里分享。

0 投票
3 回答
405 浏览

java - Java:为什么 WeakHashMap 实现了 Map,而 AbstractMap 已经实现了它?

可能重复:
Java.util.HashMap — 为什么 HashMap 扩展 AbstractMap 并实现 Map?
为什么父类和子类都实现相同的接口?

WeakHashMap<K,V>被声明为扩展AbstractMap<K,V>并实现Map<K,V>

但是AbstractMap<K,V>已经实现了Map<K,V>。看起来implements声明是多余的。

它被宣布的原因是什么?

0 投票
1 回答
713 浏览

java - 具有 Long、Int 或 String 等类型的 WeakHashMap

在对如何在 android 中传递对象引用进行一些研究时,我正在考虑以下问题。

假设我有一个带有 Long 作为键的 WeakHashmap。现在我将一个对象放入这个 WeakHashMap 并将其分配给键“new Long(1)”(假设我将保存对这个 Long 的引用)。

现在应用程序的另一部分创建了一个新的 Long(1),然后我将我的第一个 Long(用作键)设置为 null。

  1. WeakHashMap 中的对象会发生什么?
  2. 如果我将 Long 替换为具有 Long 成员的自己的 Class 并让它的 compare()-Method 返回 true,如果它与另一个相同类型的对象(我自己的类)在它的 Long 中具有相同的值。
  3. 假设在这两种情况下 WeakReference 都被清除了。如果我在清除第一个密钥之前使用第二个创建的密钥访问 WeakHasMap 会有所不同吗?
0 投票
3 回答
232 浏览

java - WeakHashMap 随机清除

我正在运行一个游戏,当我启动时我将图像加载到WeakHashMap图像中。当我运行我的游戏时,我的 RAM 一直在增加,最后我WeakHashMap只是卸载了他们所有的数据。这与垃圾收集有关吗?有什么解决办法吗?

0 投票
2 回答
418 浏览

java - 在 WeakHashMap 上重新创建相同的键

根据 Java doc for weakhashmap

“此类主要用于键对象,其 equals 方法使用 == 运算符测试对象身份。一旦丢弃此类键,它将永远无法重新创建,因此不可能在 WeakHashMap 中查找该键"

这是否意味着如果我们使用 objectA 作为 Weakhashmap 中条目 0 的键,然后我们删除该条目,testMapHashWeak.remove(objectA);我们就不能objectA对另一个条目使用相同的键?因为我做了一个小测试,我可以做到:

作为输出:

0 投票
2 回答
718 浏览

java - 当对象被垃圾回收时记录

我的应用程序记录了某些对象的使用情况——我的设置使用 AspectJ 来识别我感兴趣的上下文并记录这些使用情况。我稍后加载日志文件进行分析,但出于效率原因,知道何时不再可访问对象很有用。

我目前的方法是使用“垃圾记录器”记录我感兴趣的对象,然后创建一个包含对象身份哈希码的“保存器”对象,并将其存储在弱哈希图中。这个想法是当对象被收集时,saver 对象将从弱哈希映射中移除并被收集,从而运行代码来记录收集对象的身份哈希码。我使用单独的线程和队列来防止在垃圾收集器中造成瓶颈。这是垃圾记录器代码:

我的问题是这看起来很复杂,因为弱哈希映射不一定会清除其条目,除非需要空间,所以我可能会在收集对象后等待很长时间才能记录它。基本上,我正在寻找一种更好的方法来实现这一目标。

注意 - 我正在监视任意对象并且无法控制它们的创建,因此无法覆盖它们的 finalize 方法。

0 投票
1 回答
279 浏览

android - 在 Android 应用程序中使用 xstream 时调用 Wea​​kHashMap 时堆栈溢出

当 xstream 将 ShootRecord 转换为 xml 时,为什么会出现“调用 Ljava/util/WeakHashMap 时堆栈溢出”错误?

ShootRecord 类字段和构造函数

MainActivity 类定义:

public class MainActivity extends Activity implements View.OnTouchListener

FileSender 类构造函数:

FileSender 中的方法:

public boolean postToServletOverWifi(ShootRecord recToSend, Context context){

调用方法:

public void promptUserToSendShootRecord(ShootRecord recToSend) {

目录

0 投票
4 回答
1384 浏览

multithreading - 带有 WeakHashMap 的 ConcurrentModificationException

我有下面的代码,但我得到 ConcurrentModificationException,我应该如何避免这个问题?(出于某种原因,我必须使用 Wea​​kHashMap)

0 投票
6 回答
4109 浏览

java - 有 HashMap 和 Concurrent HashMap 的时候,WeakHashMap 的目的是什么?

当已经有其他实现可用时,需要引入 Weak HashMap。

简而言之,我有两个问题:

  • Why jdk has WeakHashMap when there is HashMap and Concurrent HashMap in java ?

  • What is the use of it in real life applications ?

编辑 :

虽然 WeakHashmap 键是一个弱引用,但它们仍然引用了一些东西,而不是 GC 丢弃 WeakHashMap 中的键。

0 投票
6 回答
11020 浏览

java - 弱哈希映射与哈希映射

在下面的代码示例中,当键设置为 null 并被System.gc()调用时,WeakHashMap会丢失所有映射并被清空。

Output: Weak Hash Map :{}

WeakHashMap与 一起使用HashMap并且键设置为空时,WeakHashMap不会丢失其键值映射。

输出: Weak Hash Map :{Java=Java, Hello=Hello, World=World, Programming=Programming} Hash Map :{Programming=Programming, World=World, Java=Java, Hello=Hello}

我的问题是为什么即使在丢弃密钥之后,第二个代码示例中的条目也不会WeakHashMap丢失?