Re: [問題] 關於 Garbage Collection

看板java作者 (-858993460)時間12年前 (2011/10/24 15:35), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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きっと誰にも奪われないモノがあるはずさ開口一番一虚一実跳梁跋扈形影相弔yL羊頭狗肉東奔西走国士無双南柯之夢 歪も ぶ  意味がないと思えるコトがあるPきっとでも意図はそこに必ずある んの く 依依恋恋空前絶後疾風怒濤有無相生H急転直下物情騷然愚者一得相思相愛 だが ろ 無意味じゃない6あの意図 恋た で 有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.135

10/24 16:25, , 1F
所以說 A12 和 A13 的 b1 其實是指向同一個 B10~
10/24 16:25, 1F

10/24 16:27, , 2F
我懂了!! 感謝你的幫助~
10/24 16:27, 2F

10/24 23:12, , 3F
嚴格說來一樓不太對 那"兩個" b1 是同一個變數
10/24 23:12, 3F

10/24 23:14, , 4F
那是因為宣告為靜態的關係 所以它其實就是 A.b1
10/24 23:14, 4F

10/25 00:16, , 5F
再次受教了! L大讓我觀念更清楚了 :D
10/25 00:16, 5F
文章代碼(AID): #1EfHKvug (java)
文章代碼(AID): #1EfHKvug (java)