【发布时间】:2013-05-02 15:04:57
【问题描述】:
我们正在尝试将所有树节点以线性方式存储到 HashMap 中(一个接一个地遍历一个节点)并且遇到内存问题(OutOfMemoryError: Java heap space),最大内存设置为 90mb (-Xmx90M)
这是我们正在使用的代码(在 HashMap 中包含 HashMap):
HashMap<Integer, MyNode> refNodeMap
HashMap<String, HashMap<Integer, MyNode>> spNodeMap;
String Id;
toCopy 是 MyNode 对象类型。
if (refNodeMap.containsKey(Id)) {
spNodeMap.get(Id).put(toCopy.getId(), toCopy);
} else {
spNodeMap.put(Id, new HashMap<Integer, MyNode>());
spNodeMap.get(Id).put(toCopy.getId(), toCopy);
}
- 我们能否避免将 innerHashMap 与类对象一起使用?如果可以,该类的外观如何?
- 我们如何有效地将所有树节点存储到 HashMap 或任何其他集合中以便以后检索?
【问题讨论】:
-
您要存储的数据/信息到底是什么?以及您将如何/在哪里使用它们
-
使用 HashMap 在树中实现节点是一个糟糕的主意。 HashMap 有很多存储开销。
-
您可能应该解释一下在您的情况下什么是“树节点”以及为什么将它们放入哈希图中。有多少节点是“所有”节点?一定数量的节点总是会耗尽内存。
-
90M?这是很小的内存量。小于默认金额。你为什么把自己限制在这么少的范围内?
-
树节点是我的自定义类对象之一。构建超集树后,在选择该节点时,基于节点 ID,我需要显示一个详细信息表。因此存储它如果 HashMap 是存储开销,有人可以推荐我如何存储它吗?
标签: java collections map hashmap