我有一个GUI程序,其中的段可以很大并且包含很多对象。我的计划的特点之一是“关闭”该部分并创建一个新部分。大量的数据删除
这整个段仅由一个JPanel并一个ArrayList附接至该程序。如果我将这两个处理/设置为null,则应该无法访问任何JPanels childen(其中一个是扩展GUI组件的复杂对象,但也包含很多变量)。
如果我是正确的,所有JPanels childeren的将被垃圾收集器收集。
然而,发生了什么给孩子的孩子吗?我有一些“家庭”达到5-6代“世代”。只有在GC第5次(或第6次)通过时,它们才会被删除,还是会检测到整个“家庭”无法访问,并立即收集(或首次通过)?
编辑:另一个小问题:是否有Swing组件的方法,将删除所有的它的孩子吗?
据我所知GC不会挑剔删除对象!解除引用的对象在没有gc查看它们属于哪个“代”的情况下会收集垃圾。这意味着如果最后三代是无用的物体,他们将收集所有垃圾! –
Java GC多年来一直在变化。对于这样一个“聚焦”的问题,应该发布特定的JVM(和使用的选项)。但是,如果这篇文章中的“世代”意味着*控制父母和祖父母等*,那么**它与GC代**无关。现代GC可以将这些“无根”图形中的对象识别为“无法访问”。查阅Mark和GC,了解一些基本概念。 – 2012-09-11 20:28:58
例如http://blogs.msdn.com/b/abhinaba/archive/2009/01/30/back-to-basics-mark-and-sweep-garbage-collection.aspx和http://lambda.uta.edu/ cse5317/notes/node47.html(当然现代的GC是复杂得多的) – 2012-09-11 20:35:39