在读取大输出时,TextArea使用大量RAM

时间:2017-05-01 14:36:24

标签: java

我的程序执行系统命令,并逐行返回输出,但是,有一些命令可以产生大量的行,在这种情况下,RAM的使用率会上升到~700Mbs,知道任何RAM的使用情况。其他命令是50-60Mbs。

这是使用BufferedReader处理读取输出的方法,它由另一个处理命令进程创建的方法调用。它还将输出逐行传递给showOutputLine()方法,该方法将其打印到控制台或TextArea。

    protected void formatStream(InputStream inputStream, boolean isError) {

    bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    String tempLine = null;

    // Read output
    try {
        while ((tempLine = bufferedReader.readLine()) != null) {
            showOutputLine(tempLine, isError);
        }
    } catch (IOException e) {// just stop
    }

}

导致问题的命令的一个示例:

  

adb logcat

编辑:看来BufferedReader是无辜的,然而,问题仍然存在。由JTextArea引起。

1 个答案:

答案 0 :(得分:1)

BufferedReader始终在固定大小的数组中使用大约16 KB(8K * 2字节字符)。如果你使用的不仅仅是这个,那么产生如此多的字符串会产生副作用(特别是如果你有很长的文本行),而不是BufferedReader本身。

TextArea可以保留更多的内存使用量,具体取决于文本的长度。

在任何情况下,真正重要的内存使用量是Full GC之后的堆大小,其余的是各种开销。

BTW Mb = Megi-bit,MB =兆字节。