我的程序执行系统命令,并逐行返回输出,但是,有一些命令可以产生大量的行,在这种情况下,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
}
}
导致问题的命令的一个示例:
编辑:看来BufferedReader是无辜的,然而,问题仍然存在。由JTextArea引起。adb logcat
答案 0 :(得分:1)
BufferedReader始终在固定大小的数组中使用大约16 KB(8K * 2字节字符)。如果你使用的不仅仅是这个,那么产生如此多的字符串会产生副作用(特别是如果你有很长的文本行),而不是BufferedReader本身。
TextArea可以保留更多的内存使用量,具体取决于文本的长度。
在任何情况下,真正重要的内存使用量是Full GC之后的堆大小,其余的是各种开销。
BTW Mb = Megi-bit,MB =兆字节。