【发布时间】:2013-01-11 01:30:12
【问题描述】:
我有一个带有 AWT GUI 的应用程序,我使用 JTextArea 来记录输出。如果我用setText(null) 或removeAll() 或setText("") 擦除文本,然后运行垃圾收集器System.gc(),我注意到整个文本仍在内存中。我怎样才能真正删除文本?
我对分析器不是很熟悉,这是我在setText(null)之后在内存转储中看到的:
【问题讨论】:
-
您可能正在处理一个已嵌入到String Pool 中的字符串。我不得不问,为什么这很重要?还有为什么 AWT GUI 使用 Swing 组件 (JTextArea)?
-
JTextArea 听起来像 Swing 而不是 AWT。
-
另外,请理解,即使您尝试运行它,您也无法完全控制获得 GC 的内容。另外,字符串是否被任何其他变量引用?
-
初始值是字符串常量还是动态构建的?
-
您是否尝试过查看是否有任何对象仍在引用您的字符串?通常,分析器能够提供此类信息。顺便说一句,如果你的字符串是某个类的静态最终常量,它永远不会是 GC'eed
标签: java swing heap-memory jtextarea profiler