私はBig O Notationで宿題をしています。ますます多くの整数を持つリストを作成し、リストをソートしてどのBig O Collection.sort()がどれくらいかを判断するのにかかる時間を計算する必要があります。メモリ不足:Javaヒープスペース
私はこれを行うためのコードを書いており、ソート方法が各リストサイズのいくつかの反復の過程を引き継ぐ時間に関するデータを生成しています。
私は50,000の整数のリストをソートすることができますが、まったく同じ操作をやり直すとメモリが使い果たされます。私はガベージコレクタが私の記憶を取り戻すべきだと思うので、理論上は操作を繰り返すのに問題はないはずです。
大きな変数をnullに設定し、大きなリストへの参照をforループブロックの外に保存しないことについては読んだことがあります。私の整数リストへの参照を生かしておく必要はないと思います。
私はガベージコレクタが私の記憶を取り戻すことができないと間違っていますか?あなたがTesting t = new Testing(dataSize, thisList);
を行うときに(私はこれは間違いだと思います)のコピーを参照 ので - -
private static TreeMap<Integer, ArrayList<Long>> doExperiment(int iterations, int step, int trials, List listType) {
TreeMap<Integer, ArrayList<Long>> results = new TreeMap();
for (int i = 1; i <= iterations; i++) {
// Data size ranges from 1000 - 50,0000 if step = 1000 and iterations = 50
int dataSize = i * step;
ArrayList<Long> trialResults = new ArrayList<Long>();
for (int j = 1; j <= trials; j++) {
// This may be LinkedList, ArrayList depending on the parameter.
List thisList = listType;
// dataSize works up to 50,000 Integers.
Testing t = new Testing(dataSize, thisList);
long nanos = t.timedSort();
// Prints a formatted string to standard output.
processResults(nanos, j, trials, i, iterations);
// The large list exists only within this Testing instance. Set it to null
t = null;
// Please, garbage collection Gods...
System.gc();
}
results.put(dataSize, trialResults);
}
return results;
}
'テストトン= ... 'についての何かして、'トン= null'なので、 'ループではないと思えます。まず第一に、 'System.gc()'は即時ガベージコレクションを保証しません。第二に何百回もGCを連続して実行したくないということです。私は起こっていることは、GCがすぐに実行されないので、まだ多くのテストのインスタンスで終わるということです。 'Testing t = null; 'をすべてのループの中から移動し、' t = null'と 'System.gc()'を削除します。 – kooker
フルコードを教えてください。 'Testing'は何をしますか? 'processResults'は何をしますか?なぜあなたは 'trialResults'を使用していませんか?反復は何回ですか?あなたは 'iterations'数のArrayListを作成しています。あなたはその機能の結果で何をしていますか? – NickL
あなたがしているのはあなたの並べ替えの実行のタイミングです、なぜあなたの並べ替えられたリストを返すのですか?ちょうどそれをして、リストを保存しないでください。 –