作者LPH66 (-858993460)
看板java
標題Re: [問題] 關於 Garbage Collection
時間Mon Oct 24 15:35:19 2011
※ 引述《mserway (mserway)》之銘言:
: 大家好。
: 詢問的是當程式執行到 第 18 行,有多少個物件有資格被資源回收(GC)。
: 3. class Beta {}
: 4. class Alpha {
: 5. static Beta b1;
: 6. Beta b2;
: 7. }
: 8. public class Tester {
: 9. public static void main(String [] args) {
: 10. Beta b1 = new Beta();
: 11. Beta b2 = new Beta();
: 12. Alpha a1 = new Alpha();
: 13. Alpha a2 = new Alpha();
: 14. a1.b1 = b1;
: 15. a1.b2 = b1;
: 16. a2.b2 = b2;
: 17. a1 = null; b1 = null; b2 = null;
: 18. // do stuff
: 19. }
: 20. }
: 此題為 "SCJP 6 專業認證手冊" 的題目,第284頁 第11題
: 解答為 "只有一個物件" 有資格被資源回收。
: 解釋如下3點 :
: 1) a2 有指涉到一個物件;
: 2) a2.b2有指涉到一個物件;
: 3) 仍然可能透過 a2.b1 這個靜態變數來存取另一個 Beta 物件。
: 我的問題是 : 哪個物件有資格被資源回收? a1 或是 b1 指涉的物件?
: b1 原先指涉的 Beta 物件可否被 a1.b1 (靜態變數)存取?
: 覺得自己在這部分上有盲點,希望有興趣的朋友可以給予一點幫助~ 謝謝!
總共有四個實體被 new 出來
為方便起見依照 new 它出來的行數分別叫做 B10 B11 A12 A13
那麼他的解釋就可以這麼改寫:
1) A13 仍被 a2 參考;
2) B11 仍被 a2.b2 參考;
3) B10 仍被 a2.b1 參考. (其實以 A.b1 亦可使用到 B10 此實體)
於是可被回收的是 A12
這樣有把問題搞懂了嗎?
--
い
ああオレたちには見えてるモノがあるbデ きっと誰にも奪われないモノがあるはずさ
け
開口一番一虚一実跳梁跋扈形影相弔yュL羊頭狗肉東奔西走国士無双南柯之夢 歪も
ぶ
意味がないと思えるコトがある ラPきっとでも意図はそこに必ずある んの
く
依依恋恋空前絶後疾風怒濤有無相生 ラH急転直下物情騷然愚者一得相思相愛 だが
ろ
無意味じゃない ラ6あの意図が 恋た
で
有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.135
推 mserway:所以說 A12 和 A13 的 b1 其實是指向同一個 B10~ 10/24 16:25
推 mserway:我懂了!! 感謝你的幫助~ 10/24 16:27
→ LPH66:嚴格說來一樓不太對 那"兩個" b1 是同一個變數 10/24 23:12
→ LPH66:那是因為宣告為靜態的關係 所以它其實就是 A.b1 10/24 23:14
推 mserway:再次受教了! L大讓我觀念更清楚了 :D 10/25 00:16