JAVA RCP 应用程序, Windows 7 32bit
, jdk1.6.0_21
, Eclipse Indigo
,
我们有两个相同的修订版XML
。两者都要unmarshalled
树。然后将修订组合成一个超集树。
在超集中选择树节点时Tree
,我们在第一个详细信息表中显示修订版 1 的选定节点的详细信息,并在第二个详细信息表中显示修订版 2 的同一节点的详细信息。
为了显示节点的详细信息(& 用于其他目的),我们将相应的修订树节点存储到 HashMap 中(在节点之后的节点树遍历之后)。
但是,当 xml 很大时(每个修订版有超过 50000 个节点),我们就会遇到内存问题(OutOfMemoryError: Java heap space)。我们的 RCP 应用程序的最大内存设置为 96mb (-Xmx96M)。
我们使用的当前代码包含HashMap
在HashMap
一个递归调用中(因为树中存在不同的节点“类型”):
HashMap<String, HashMap<Integer, Node>> refNodeMap;
String nodeId;
toCopy 是 Node 类对象类型。
if (refNodeMap.containsKey(nodeId)) {
refNodeMap.get(nodeId).put(toCopy.getId(), toCopy);
} else {
refNodeMap.put(nodeId, new HashMap<Integer, Node>());
refNodeMap.get(nodeId).put(toCopy.getId(), toCopy);
}
目前正在尝试HashMap
用类对象替换,但是对于上述代码场景,我将不得不使用数组或arraylist
在类中,这又会导致内存问题。
还看着guava
和FlatMap
来自谷歌。
我们如何有效地将树节点存储到集合或任何其他方式中,以便稍后检索它以在各个修订详细信息表中显示各个树节点的属性?对可扩展性要求有什么建议吗?