我想在Java中進行一些排序練習。Java MergeSort - 內存不足錯誤:Java堆空間
我正在合併排序現在... Eclipse正在輸出Out Of Memory Error: Java Heap space
,但我不知道如何調試。
我覺得我的代碼是好的 - 任何想法?
import java.util.ArrayList;
import java.util.List;
public class Sorts {
List<Integer> initialList;
public Sorts() {
initialList = new ArrayList<Integer>();
initialList.add(2);
initialList.add(5);
initialList.add(9);
initialList.add(3);
initialList.add(6);
System.out.print("List: [");
for (int values : initialList) {
System.out.print(values);
}
System.out.println("]");
splitList(initialList);
}
public List<Integer> splitList(List<Integer> splitMe) {
List<Integer> left = new ArrayList<Integer>();
List<Integer> right = new ArrayList<Integer>();
if (splitMe.size() <= 1) {
return splitMe;
}
int middle = splitMe.size()/2;
int i = 0;
for (int x: splitMe) {
if (i < middle) {
left.add(x);
}
else {
right.add(x);
}
i++;
}
left = splitList(left);
right = splitList(right);
return mergeThem(left, right);
}
public List<Integer> mergeThem(List<Integer> left, List<Integer> right) {
List<Integer> sortedList = new ArrayList<Integer>();
int x = 0;
while (left.size() > 0 || right.size() > 0) {
if (left.size() > 0 && right.size() > 0) {
if (left.get(x) > right.get(x))
sortedList.add(left.get(x));
else
sortedList.add(right.get(x));
}
else if (left.size() > 0) {
sortedList.add(left.get(x));
}
else if (right.size() > 0) {
sortedList.add(right.get(x));
}
}
return sortedList;
}
}
我大膽猜測該代碼被無限將項目添加到列表中,直到有沒有更多的內存。使用調試器瀏覽代碼,看看是否如此。 – 2013-03-22 20:37:33
如果你在輸入的時候得到OOME的那麼小,你可能會有無限的遞歸。 – 2013-03-22 20:37:39
嘗試visualvm.exe,它位於JDK的bin文件夾中。谷歌的教程。 – Simulant 2013-03-22 20:37:42