Re: [問題] 請教一道GC題目

看板java作者 (ha(ruhi|yate)ism)時間17年前 (2007/03/13 11:39), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/9 (看更多)
※ 引述《Franckie (as simple as possible)》之銘言: : ※ 引述《gp20 ()》之銘言: : : public class GC { : : private Object o ; : : private void dosomethingElse(Object obj){o = obj ; } : : public void dosomething() { : : Object o = new Object() ;//第5行 : : dosomethingElse(o) ;//第6行 : : o = new Object() ;//第7行 : : dosomethingElse(null) ;//第8行 : : o = null ;//第9行 : : }//第10行 : : } : : When doSomething method is called, after which line does Object created in : : line 5 become available for garbage collection ? : : 書中給的答案是,第7行後第五行被created的Object才可以被GC : : 但是我覺得是第8行耶 : : 因為到第7行的時候產生的Object仍然被GC內的成員o所reference : : 應該要到第8行讓它也指向null後,之前產生的Object才能被GC : : 不知道板友們的看法是? : : 謝謝唷… : 第五行所產生的Object只被 o 所 reference : 第七行把 o reference 到另外一個Object : 如此一來第五行所產生的Object就沒有被reference到 : 所以就可以被GC了 我的想法是和原PO一樣 如果真的在第七行就能被GC的話 那下面這段程式 (我多加兩行) public class GC { private Object o; private void dosomethingElse(Object obj){o = obj ; } public void dosomething() { Object o = new Object() ;//第5行 dosomethingElse(o) ;//第6行 o = new Object() ;//第7行 doanotherthing(); dosomethingElse(null) ;//第8行 o = null ;//第9行 }//第10行 private doanotherthing(){System.out.println(o);} //這裡 } 我標「這裡」的地方到底會印出什麼? 是第五行的物件還是null? 如果是第五行的物件的話 那假如剛好在跑到這之前這物件就已經被GC掉了 那會發生什麼事? -- "LPH" is for "Let Program Heal us".... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.197.115
文章代碼(AID): #15zXpxJy (java)
討論串 (同標題文章)
文章代碼(AID): #15zXpxJy (java)