0

在我的 java 应用程序中,当我关闭一个打开的模型时,一些对象没有被垃圾收集。我正在使用 Eclipse MAT 来检测到 GC 根目录的路径,并确保在模型关闭后将引用设置为 null,以便 GC 可以清理内存。

我无法清除以下参考资料(Eclipse MAT 输出的摘录)。

myTree javax.swing.JTree
    uiTreeExpansionListener, keyListener, focusListener javax.swing.plaf.basic.BasicTreeUI$
          HandlerpressedPath javax.swing.tree.TreePath
             lastPathComponent myClass

如果myTree (JTree) 没有重置/清除侦听器中的值,则在lastPathComponent中维护对myClass对象的引用,并且它不会被垃圾收集。

关于如何告诉树不维护引用的任何想法?

编辑:我已经使用以下方法来清除引用,但它并没有清除所有(上面提到的)引用。

    公共无效清除(){
        取消编辑();
        全部收缩();
        清空选项();
        clearToggledPaths();
        重置键盘操作();
        fireTreeCollapsed(null);
    }
4

1 回答 1

0

我找到了一种解决方法(不是一个干净而优雅的解决方案),至少可以解决我的问题。下面的代码完成了释放所有(已知)引用的工作。

公共无效清除(){
   取消编辑();
   清空选项();
   clearToggledPaths();
   重置键盘操作();
   更新UI();
}

由于我需要在关闭模型时执行上述方法,因此性能可能不会受到太大影响。但如果可能的话,我更喜欢更优雅(并且在概念上正确)的解决方案。

于 2012-05-18T16:03:17.327 回答