我有一个应用程序,它形成所有可能的配对,然后比较这些配对,但是当我运行该应用程序时,它给了我例外:OutOfMemoryError:运行时的Java堆空间码。我尝试了-Xmx1500m,但例外情况一直在持续。 用于产生对所述代码被如下异常:OutOfMemoryError:运行代码时的Java堆空间
File file = ...;
final Map<Pair, Collection<Integer>> lineNumbersByPair = new HashMap<Pair, Collection<Integer>>();
/*
* Step 1: Read in the lines, one by one.
*/
Reader reader = new FileReader(file);
try {
BufferedReader bufferedReader = new BufferedReader(reader);
try {
String line;
int lineNumber = 0;
while ((line = bufferedReader.readLine()) != null) {
lineNumber++;
String[] tokens = line.split("\\s+");
int[] values = new int[tokens.length];
for (int i = 0; i < tokens.length; i++) {
values[i] = Integer.parseInt(tokens[i]);
}
for (int i = 0; i < values.length; i++) {
for (int j = i + 1; j < values.length; j++) {
Pair pair = new Pair(values[i], values[j]);
Collection<Integer> lineNumbers;
if (lineNumbersByPair.containsKey(pair)) {
lineNumbers = lineNumbersByPair.get(pair);
} else {
lineNumbers = new HashSet<Integer>();
lineNumbersByPair.put(pair, lineNumbers);
}
lineNumbers.add(lineNumber);
}
}
}
} finally {
bufferedReader.close();
}
} finally {
reader.close();
}
/*
* Step 2: Identify the unique pairs. Sort them according to how many lines they appear on (most number of lines to least number of lines).
*/
List<Pair> pairs = new ArrayList<Pair>(lineNumbersByPair.keySet());
Collections.sort(
pairs,
new Comparator<Pair>() {
@Override
public int compare(Pair pair1, Pair pair2) {
Integer count1 = lineNumbersByPair.get(pair1).size();
Integer count2 = lineNumbersByPair.get(pair2).size();
return count1.compareTo(count2);
}
}
);
Collections.reverse(pairs);
/*
* Step 3: Print the pairs and their line numbers.
*/
for (Pair pair : pairs) {
Collection<Integer> lineNumbers = lineNumbersByPair.get(pair);
if (lineNumbers.size() > 1) {
System.out.println(pair + " appears on the following lines: " + lineNumbers);
}
}
我读围绕15MB一个文件,它包含如单数的20000lines,并有围绕每行40个数字,它形成的所有可能的对每条线的。 任何人有任何想法如何解决这个问题?谢谢
你会得到适当的结果较小的文件?迄今为止的成功输出? – 2010-10-13 04:51:42
是的,它可以在较小的文件上正常工作,并且输出结果都很好 – starcaller 2010-10-13 04:52:34
starcaller,正如J-16 SDiZ所评论的,正如我发布的那样 - 这个问题将会成为内存和时间破坏者。你真正想要解决的用例或问题是什么? – birryree 2010-10-13 05:05:28