1

我有一个带有 GUI 的程序,它的段可以很大并且包含很多对象。我的程序的功能之一是“关闭”该段并创建一个新段。

这整个段仅通过一个 JPanel 和一个 ArrayList 附加到程序。如果我将这两个处理/设置为 null,则应该无法访问任何 JPanel 子项(其中一个是扩展 GUI 组件的复杂对象,但也包含很多变量)。

如果我是正确的,垃圾收集器将收集所有 JPanel 子项。

然而,孩子们的孩子们怎么办?我有一些“家庭”可以达到 5-6 个“世代”。它们只会在 GC 的第 5 次(或第 6 次)通过时被删除,还是会检测到整个“家庭”无法访问并立即收集(或在第一次通过时)?

编辑:另一个小问题:swing 组件是否有一种方法可以删除所有子组件?

4

2 回答 2

2

对于经验方法,反复练习您的程序并寻找此处显示的模式,其中消耗的内存未能返回到基线。

图像泄漏

相反,此示例在每个循环后返回基线。

图像无泄漏

于 2012-09-12T00:13:26.463 回答
0

对您问题的评论很好地解决了删除问题。但是,如果您仍然对在不删除组件的情况下删除组件的子项感到好奇,那么答案是否定的,如JComponent 文档中所示(我假设您使用的是 Java 7,如果不是,您可以轻松更改为正确的Java 版本)。如果您想快速轻松地从组件中删除子组件而不删除组件本身,我建议您只重新初始化组件。

于 2012-09-11T20:49:50.087 回答