- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在用 Java 管理一个存储用户数据的项目。用户可以在线,也可以离线。当用户在线时,他们的数据会加载到数据对象中以便于访问,并在他们注销时卸载。
但是,对于离线用户,为了防止同时操作数据的多个命令并发访问数据而丢失数据,我存储了一个 weakhashmap 作为加载的用户数据对象的缓存。如果任何东西需要访问离线数据对象来修改它,系统将首先检查缓存,然后再从文件加载它。
我唯一能想到如何存储它们的是字符串键,代表用户的用户名。但由于 Java 的工作方式,由于 VM 的字符串缓存系统,这似乎并不总是有效。
最初我想使用字符串包装器,但再次由于 HashMap 的工作方式(通过使用哈希码),创建新的字符串包装器不会获得我需要的值,如果我存储字符串包装器,那会通过始终存储对 key 的强引用(防止从 weakhashmap 中删除 key )来破坏目的。
也许我只是不明白 weakhashmap 应该如何使用 :S 如果这不是 weakhashmap 应该如何使用,我愿意接受关于如何做我想做的事情的其他想法。
最佳答案
其行为不可预测的原因在本段最后一句的 WeakHashMap 的 Javadoc 中进行了解释:
This class is intended primarily for use with key objects whose equals methods test for object identity using the == operator. Once such a key is discarded it can never be recreated, so it is impossible to do a lookup of that key in a WeakHashMap at some later time and be surprised that its entry has been removed. This class will work perfectly well with key objects whose equals methods are not based upon object identity, such as String instances. With such recreatable key objects, however, the automatic removal of WeakHashMap entries whose keys have been discarded may prove to be confusing.
您真正想要的是一个映射,其中条目在值被垃圾收集时被删除,而不是在键被垃圾收集时删除 - 也就是说,值是弱的,而不是键是弱的。您可以在这个问题上找到有关该问题的帮助:
Java Weak Hash Map - Need to remove entry based on weakness of value, not key
关于java - 如何有效地将字符串用作 Java 中的 WeakHashMap 键或替代解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038912/
在下面的代码中,我创建了一个 Pen 对象并将其颜色初始化为白色。在 Pen 的构造函数中,将字段“penColor”设置为传递给构造函数的值后,我更新了一个全局静态弱 HashMap ,其中 KEY
我正在运行一个游戏,当我启动时,我将图像加载到图像的 WeakHashMap 中。当我运行游戏时,我的 RAM 不断增加,最终我的 WeakHashMap 只是卸载所有数据。这与垃圾收集有关吗?有什么
是否存在所有值都是弱引用的 Map 类?类似于 WeakHashMap,但用于值而不是键。 提前致谢... 最佳答案 您可以使用 MapMaker这是 Guava 的一部分。 "Java DOC:A
我正在阅读有关 WeakHashMap 的 Java 文档我得到了基本概念。由于 GC 线程在后台运行,您可能会出现“异常行为”,例如迭代时出现 ConcurrentModificationExcep
我试图弄清楚 WeakHashMap 在垃圾收集后如何清理。正如你们中许多人可能知道的那样,当 WeakHashMap 条目的键被垃圾回收时,它会自动删除。但是,例如,如果我做这样的事情: List>
我想对将在内存中短时间存在的对象使用 WeakHashMap。 每个对象都有一个 id(唯一的整数字段,它是来自数据库的主键),所以我的第一个想法是使用该字段作为对象的键。 但是,Integer 是不
我正在寻找与 等价的 WeakHashMap 类,除了它把多个键映射到一个值,所以真的更像 WeakHashMap WeakHashMap etc. get 和 set 条目的方式类似于数据库中的多列
这个问题在这里已经有了答案: When would you use a WeakHashMap or a WeakReference? (10 个答案) 关闭 7 年前。 至于 weakhashma
Javadocs 说“当一个键被丢弃时,它的条目被有效地从 map 中移除”。 但除非有另一个线程偶尔会删除这样的 Map.Entry条目,值对象不会被 map 强引用吗?但是因为没有这样的线程在运行
我同时使用了 WeakHashMap。我想基于一个 Integer 参数实现细粒度的锁定;如果线程 A 需要修改由 Integer a 标识的资源,而线程 B 需要修改由 Integer b 标识的资
今天我找到了this blog post其中讨论了 WeakHashMap 在缓存上的用法。有趣的是,不是值,而是键被存储为弱引用,当引用不再存在时,整个键值对将从 WeakHashMap 中删除。因
我想测试 Java WeakHashMap 类的功能,为此我编写了以下测试: public class WeakHashMapTest { public static void main(String
如果没有对其中一个键的 Activity 引用,我如何模拟 WeakHashMap 中条目的删除。我有下一个代码: WeakHashMap weakMap = new WeakHashMap(); I
我正在使用 WeaekHashMap 来实现缓存。我想知道如果我正在遍历这个映射的键,同时垃圾收集器正在主动从这个映射中删除键,我会收到一个 ConcurrentModificationExcepti
是HashSet> Set相当于WeakHashMap ?也就是说,当条目不再被引用时,它们会自动删除吗? 如果不是,等价的是什么? 最佳答案 不,如果集合中的 WeakReference 之一引用的
有一个 WeakHashMap 实例初始化了,例如,500 个条目。现在,它的 key 在运行的应用程序中的任何地方都没有被引用一天左右。这张 map 的条目会在一定时间后自动删除吗? 我的理解是,如
如何自动清除instanceMap的key和value;当 getInstance() API 返回的 Conf 对象是使用 WeakHashMap 和 WeakReference 进行垃圾收集时
首先我想澄清一下我对WeakReference的理解因为以下问题取决于相同。 static void test() { Person p = new Person(); WeakRef
所以我有一个从 ORM/Hibernate 相互引用的对象链 大陆 有很多国家 有很多状态 有很多城市 有很多城市 国家 有一个国家 有很多状态 有很多城市 有很多城市 状态 拥有一个大陆 有一个国家
我有一个这样的代码。 private static Map PATTERNS; private static Map patterns() { if (PATTERNS == null) {
我是一名优秀的程序员,十分优秀!