小さな入力値に対して適切に実行されるコードを Eclipse で作成しましたが、テスト ケースのサイズが大きくなるとすぐにエラーが発生しOutOfMemoryException
ます。StackOverFlow
eclipse.exe -vmargs -Xmx1g
ヒープを 1G にするために使用しようとしましたが、それでも同じエラーが発生します。2G を試すと、JVM を起動できないと表示されます。
だから、このコードを実行する方法が何かあるのだろうかと思っています。任意の助けをいただければ幸いです。前もって感謝します。
編集:これは私のヒープがオーバーフローする場所です。入力サンプルが大きすぎるため、moory 問題が発生します。
while ((line = br.readLine()) != null) {
String[] linevalue= (line.trim().split("\\s+"));
int l= linevalue.length;
dg.addNode(Long.parseLong(linevalue[0]));
dg.addNode(Long.parseLong(linevalue[1]));
dg.addEdge(Long.parseLong(linevalue[0]), Long.parseLong(linevalue[1]));
}
他のクラスには次のコードが存在します。ここで mGraph は HashMap です。
public boolean addNode(T node) {
/* If the node already exists, don't do anything. */
if (mGraph.containsKey(node))
return false;
/* Otherwise, add the node with an empty set of outgoing edges. */
mGraph.put(node, new HashSet<T>());
return true;
}
public void addEdge(T start, T dest) {
/* Confirm both endpoints exist. */
if (!mGraph.containsKey(start) || !mGraph.containsKey(dest))
throw new NoSuchElementException("Both nodes must be in the graph.");
/* Add the edge. */
mGraph.get(start).add(dest);
}