我有一個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