Re: [問題] 請教一道GC題目
※ 引述《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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 2 之 9 篇):