Re: [問題] GC回收的內容

看板java作者 (小安)時間15年前 (2010/03/03 16:18), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《comaniac (coding cody)》之銘言: : 經過上篇各位的幫忙 : 我測試後發現GC沒有動靜似乎和我使用了Class Loader有關 : 雖然我在Inside JVM那本書 : 有關GC的章節上看到分析Class Loader 的reachable graph : 也依照他的作法將local variable在最後設為null : 但對class loader來說似乎不足以讓GC去動他 : (詳細原因我不太清楚,但我將object換成new string後GC就跑起來了) : 有關class loader的reachable問題我會繼續找答案@@ : 現在比較麻煩的問題是找不太到看GC釋放object的內容 : 本來以為jvmtiEventCallbacks.ObjectFree是在object被free時啟動的event : 但經過測試可能是我誤會了@@ : 不知各位高手有沒有什麼好方法可以知道GC到底free了哪些東西 : 再次感謝各位m(_ _)m 剛剛跑去偷懶來不及回上一篇... XD 下面是我修改你的範例的結果: public static void main(String[] args) { for (int i = 1; i < 5000; ++i) { Object o = new Object(){ public void finalize(){ System.out.println("garbage");; } }; o = null; System.gc(); } } --- The finalize() method is guaranteed to run once and only once before the garbage collector deletes an object. 物件只有在 unreachable 時才會經由 GC 執行 finalize(), 在執行完 finalize() 之後,如果此物件仍然是 unreachable,就會進行回收。 所以只要利用 overrid finalize method, 就 "勉強" 可以達到觀察 GC 回收物件的目的, 雖然在執行 finalize 的同時,"此物件其實還沒被回收"。 另外用這個方法, 也只能觀察到能夠被 override finalize 的 method, 對於那些在 object 中所使用的 object 就無能為力了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.183.199

03/03 18:17, , 1F
那個finalize是寫在其他method裡面的嗎@@??
03/03 18:17, 1F

03/03 19:10, , 2F
這個叫 Anonymous Inner Class,可參考 #1BWsrtyr
03/03 19:10, 2F

03/03 20:03, , 3F
原來如此,感激不盡!
03/03 20:03, 3F
文章代碼(AID): #1BZXj1mD (java)
討論串 (同標題文章)
文章代碼(AID): #1BZXj1mD (java)