我在Java和Swing方面遇到了一些内存问题。我有一个JTextArea
(与JTextPane
相同的问题)我用来从C ++可执行文件重定向stdout。而且因为我输出了大量的标准输出,JTextPane
占用了大量的空间。无论如何,我把它归结为以下代码,都是用Java编写的。
private javax.swing.JTextArea jtextareastdout;
....
for (int i = 0; i < 200000; i++) {
String randomstr = UUID.randomUUID().toString();
jtextareastdout.setText(randomstr); //<tag_memory>
if (i % 100 == 0)
System.gc(); //<tag_no_help>
}
以上代码消耗100MB。随着tag_memory行被注释掉,更少(使用我所有其他代码和UI的30MB)。如何减少Java的内存使用量?目前正在使用Java 7 update 4。
提前致谢。
答案 0 :(得分:4)
我只是不明白所有记忆的去向。
PlainDocument
讲述了这个故事:每个代码点有一个或两个16位代码单元,一行开始,以及使其可编辑所需的所有障碍。对于只读查看,我将使用重定向:yourprogram 2>&1 > view
。在Java中,您可以从stdin
读取List<String>
,每行String
,并使用JTable
进行查看。默认renderer非常有效。有一个相关的例子here。