【发布时间】:2012-05-17 20:07:21
【问题描述】:
在我的 java 应用程序中,当我关闭一个打开的模型时,一些对象没有被垃圾收集。我正在使用 Eclipse MAT 检测到 GC 根目录的路径,并确保在模型关闭后将引用设置为 null,以便 GC 可以清理内存。
我无法清除以下引用(Eclipse MAT 输出的摘录)。
myTree javax.swing.JTree uiTreeExpansionListener、keyListener、focusListener javax.swing.plaf.basic.BasicTreeUI$Handler pressedPath javax.swing.tree.TreePath lastPathComponent myClass如果 myTree (JTree) 没有重置/清除侦听器中的值,则在 lastPathComponent 中维护对 myClass 而且它不会被垃圾回收。
知道如何告诉树不要维护引用吗?
编辑:我已经把下面的方法清除引用,但它并没有清除所有(上面提到的)引用。
公共无效清除(){ 取消编辑(); 全部收缩(); 清空选项(); clearToggledPaths(); 重置键盘操作(); fireTreeCollapsed(null); }【问题讨论】:
-
关闭模型基本上意味着,我将一堆引用设置为空。我检查这些参考以查看是否加载了模型。如果为 null,那么我不会在我的应用程序 (GUI) 中显示模型数据。
标签: java swing garbage-collection jtree