java中的文件读取超出堆空间?

Posted

技术标签:

【中文标题】java中的文件读取超出堆空间?【英文标题】:File Reading getting out of Heap space in java? 【发布时间】:2015-02-22 20:36:34 【问题描述】:

我正在使用 java.io 读取日志文件和 grep 以获取 ERROR/WARN 等...使用

//FileManipulator class
   public static List<String> execute(String command) throws IOException
            List<String> output = new ArrayList<String>();

            Process process = Runtime.getRuntime().exec(new String[]  "bash", "-c", command );

            InputStream input = process.getInputStream();
            InputStreamReader isr = new InputStreamReader(input);
            BufferedReader br = new BufferedReader(isr);

            String line = null;
            while ((line = br.readLine()) != null)
                output.add(line);
               
            input.close();

            return output;
        

我在运行时得到了这个例外

Exception in thread "pool-1-thread-1" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOfRange(Arrays.java:2694)
        at java.lang.String.<init>(String.java:203)
        at java.io.BufferedReader.readLine(BufferedReader.java:349)
        at java.io.BufferedReader.readLine(BufferedReader.java:382)
        at com.citi.muni.msdc.sanity.util.FileManipulator.execute(FileManipulator.java:220)
        at com.citi.muni.msdc.sanity.util.FileManipulator.grepWarnings(FileManipulator.java:300)

所以看起来有些文件可能太大而无法处理,有人可以建议我如何编辑我当前的方法来停止遇到堆问题。

谢谢 SK

【问题讨论】:

【参考方案1】:

您要读取的文件有多大?

您可以尝试增加堆大小。 看这里:Increase heap size in Java

【讨论】:

最大的文件是5.1GB,还有一些在1.2GB左右,堆是2048M

以上是关于java中的文件读取超出堆空间?的主要内容,如果未能解决你的问题,请参考以下文章

读取大小为 330MB 的图像时发生“java.lang.OutOfMemoryError:Java 堆空间”[重复]

从文件夹中读取 Java 流中的块中的文件名

OutOfMemoryError : Spark 中的 Java 堆空间

java.lang.OutOfMemoryError:大型Excel文件的Java堆空间[重复]

Java内存分配(直接内存堆内存Unsafel类内存映射文件)

如何修复 java.lang.OutOfMemoryError:Java 堆空间错误? [复制]