我正在使用下面的代码来读取150MB的CSV文件并获得GC错误
导致问题的相同代码
foo_classes
我在方法上遇到错误:csvReader.readAll()如上所述。 我不确定代码的问题是什么,以及如何解决这个问题,因为相同的代码在20-30 MB的文件中工作正常。
答案 0 :(得分:1)
最简单的解决方案是使用flag" -Xmx"来增加堆大小。例如: " -Xmx1024m&#34 ;.首先,您应该使用一些堆大小监视工具来查看是否需要使用。
答案 1 :(得分:0)
您不应该阅读所有行,而是逐行处理文件,并且大小无关紧要,并且内存效率更高。
此处的示例:http://www.baeldung.com/java-read-lines-large-file
FileInputStream inputStream = null;
Scanner sc = null;
try {
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}
// note that Scanner suppresses exceptions
if (sc.ioException() != null) {
throw sc.ioException();
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (sc != null) {
sc.close();
}
}
编辑:此外,如果您正在寻找框架,我可以推荐Spring Batch https://projects.spring.io/spring-batch/