从CSV文件读取时超出了GC开销限制

时间:2018-03-08 14:36:53

标签: java garbage-collection out-of-memory

我正在使用下面的代码来读取150MB的CSV文件并获得GC错误

enter image description here

导致问题的相同代码

foo_classes

我在方法上遇到错误:csvReader.readAll()如上所述。 我不确定代码的问题是什么,以及如何解决这个问题,因为相同的代码在20-30 MB的文件中工作正常。

2 个答案:

答案 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/