- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个从 ORM/Hibernate 相互引用的对象链
对于某些方法,我需要能够进行一些快速查找以识别 key 。
为此,我目前在所有具有 Many 的对象中都能够快速查找内存中对象的 ID,而无需在执行线程的生命周期内触发大量的数据库查询
HashMap<Integer,Country> countriesTable
HashMap<Integer,State> statesTable
HashMap<Integer,City> citiesTable
HashMap<Integer,CityPart> citypartsTable
但我担心的是循环引用被持有并且对象永远不会被垃圾回收清除,因为它们都通过 ORM 关系相互引用并且它们都有指向彼此的私有(private)映射
现在我已经读到有关 WeakHashMap 的内容,如果没有更多的强引用,它将清除引用。
问题是是否建议在我的情况下使用 WeakHashMap 或 Hashmap 是否足以满足我的需求,并且此设置和循环引用不会损害我的内存管理。
最佳答案
如果您有 3 个对象构建一个隔离岛 (A->B->C->A
),并且这些对象都没有被其他任何地方引用,垃圾回收会抛出所有这些对象没有问题。
但是 WeakHashMap
对您的情况没有帮助,因为在 WeakHashMap
中只有键被弱引用。 (WeakHashMap
JavaDoc 的第一句话是“Map 接口(interface)的基于哈希表的实现,带有弱键。”)这些值仍然是硬引用。所以 WeakHashMap
对你的情况没有帮助。如果用作键的 Integer 对象未从其他地方引用,例如。 G。从对象内部来看,情况更糟,因为它们有资格进行垃圾收集并最终被丢弃。
如果您的 Integer 对象未在其他任何地方引用,则您需要一个普通的 HashMap
,或者如果这些对象是从您的对象中引用的那些对象,则需要一个 WeakHashMap
您还必须将值包装在 WeakReference
实例中,然后在从 map 中检索对象时检查它们是否仍然可用或是否已被垃圾收集。
关于java - WeakHashMap 还是 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574584/
在下面的代码中,我创建了一个 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) {
我是一名优秀的程序员,十分优秀!