0

JAVA RCPアプリケーションWindows 7 32bit、、、、jdk1.6.0_21Eclipse Indigo

同じ の 2 つのリビジョンがありXMLます。どちらもunmarshalled木です。次に、リビジョンを組み合わせてスーパーセット ツリーを作成します。

スーパーセットでツリー ノードを選択するTreeと、revision1 の選択されたノードの詳細が最初の詳細テーブルに表示され、revision2 の同じノードの詳細が 2 番目の詳細テーブルに表示されます。

ノードの詳細を表示するために (& 他の目的で)、それぞれのリビジョン ツリー ノードを HashMap に格納しています (ノードごとのツリー トラバーサルの後)。

ただし、xml が巨大な場合 (各リビジョンに 50000 を超えるノードがある場合)、メモリの問題が発生します (OutOfMemoryError: Java ヒープ スペース)。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

グーグルも見ましたguavaFlatMap

それぞれのリビジョン詳細テーブルにそれぞれのツリー ノードのプロパティを表示するために後で取得できるように、ツリー ノードをコレクションまたはその他の手段にどの程度効率的に格納できるでしょうか。スケーラビリティ要件に関する推奨事項はありますか?

4

0 に答える 0