我的程序执行系统命令,并逐行返回输出,但是,有几个命令会生成大量行,在这种情况下,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 引起。
最佳答案
BufferedReader 始终在固定大小的数组中使用大约 16 KB(8K * 2 字节字符)。如果您使用的数量超过这个数量,那么这是生成如此多字符串的副作用(特别是如果您有很长的文本行),而不是 BufferedReader 本身。
TextArea 可以保留更多的内存使用量,具体取决于文本的长度。
无论如何,真正重要的内存使用量是 Full GC 后堆的大小,剩下的就是各种开销。
顺便说一句,Mb = 兆位,MB = 兆字节。
关于java - 读取大输出时 TextArea 会使用大量 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43720892/