2012-09-11 89 views
1

我有一個GUI程序,其中的段可以很大並且包含很多對象。我的計劃的特點之一是「關閉」該部分並創建一個新部分。大量的數據刪除

這整個段僅由一個JPanel並一個ArrayList附接至該程序。如果我將這兩個處理/設置爲null,則應該無法訪問任何JPanels childen(其中一個是擴展GUI組件的複雜對象,但也包含很多變量)。

如果我是正確的,所有JPanels childeren的將被垃圾收集器收集。

然而,發生了什麼給孩子的孩子嗎?我有一些「家庭」達到5-6代「世代」。只有在GC第5次(或第6次)通過時,它們纔會被刪除,還是會檢測到整個「家庭」無法訪問,並立即收集(或首次通過)?

編輯:另一個小問題:是否有Swing組件的方法,將刪除所有的它的孩子嗎?

+1

據我所知GC不會挑剔刪除對象!解除引用的對象在沒有gc查看它們屬於哪個「代」的情況下會收集垃圾。這意味着如果最後三代是無用的物體,他們將收集所有垃圾! –

+1

Java GC多年來一直在變化。對於這樣一個「聚焦」的問題,應該發佈特定的JVM(和使用的選項)。但是,如果這篇文章中的「世代」意味着*控制父母和祖父母等*,那麼**它與GC代**無關。現代GC可以將這些「無根」圖形中的對象識別爲「無法訪問」。查閱Mark和GC,瞭解一些基本概念。 – 2012-09-11 20:28:58

+0

例如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

回答

0

你的問題的意見做處理刪除問題的一個好工作。但是,如果您仍然對在不移除組件的情況下移除組件的孩子好奇,答案是否定的,如JComponent documentation(我假設您使用的是Java 7,如果不是,則可以輕鬆更改爲正確的版本的Java)。如果您想要快速輕鬆地從組件中刪除組件,而不刪除組件,我建議只重新初始化組件。

2

對於經驗方法,反覆鍛鍊你的程序,尋找here所示的模式,其中消耗的內存無法恢復到基線。

image leak

與此相反,本example返回到每次循環後的基線。

image no leak