0

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)。

我们使用的当前代码包含HashMapHashMap一个递归调用中(因为树中存在不同的节点“类型”):

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在类中,这又会导致内存问题。

还看着guavaFlatMap来自谷歌。

我们如何有效地将树节点存储到集合或任何其他方式中,以便稍后检索它以在各个修订详细信息表中显示各个树节点的属性?对可扩展性要求有什么建议吗?

4

0 回答 0