我想要一个有效的代码来做到这一点。
当我运行此代码时,几分钟后代码运行速度非常慢且CPU使用率很高。
读取文件并在数据库中写入wholeDocument
时,几分钟后Java编译器显示Error java.lang.OutOfMemoryError: GC overhead limit exceeded
。
String wholeDocument = "";
try {
bufferedReader = new BufferedReader(new FileReader(files));
String line;
int count = 0;
while ((line = bufferedReader.readLine()) != null) {
if (line.contains("<page>")) {
wholeDocument = line;
while ((line = bufferedReader.readLine()) != null) {
wholeDocument = wholeDocument + "\n" + line;
if (line.contains("</page>")) {
System.out.println(count++);
wholeDocument = "";
break;
}
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
您必须记住,Strings是java中的不可变数据类型。这意味着每次执行String = String + String时,它都会创建一个全新的字符串,并将旧字符串保留在内存中。如果您使用StringBuilder(或StringBuffer来保证线程安全),您可以安全地将新字符串“追加”到现有字符串,而不必担心过度使用内存。
前:
StringBuilder sb = new StringBuilder();
sb.append("New String");