Re: [問題] 關於 Garbage Collection

看板java作者 (Mr. Pan)時間14年前 (2011/10/25 00:02), 編輯推噓3(302)
留言5則, 5人參與, 最新討論串3/3 (看更多)
注意有上色的 b1 b2 b3,同顏色表示同一個變數 # 10~11 : ╭───────╮ b1 ───→│ Beta │ ╰───────╯ ╭───────╮ b2 ───→│ Beta │ ╰───────╯ ========================================= # 12~13 : Alpha.b1 ───→ null ╭──────╮ │ Alpha │ null←┼─b1 (s) │←─── a1 ╭───────╮ null←┼─b2 │ b1 ───→│ Beta │ ╰──────╯ ╰───────╯ ╭───────╮ ╭──────╮ b2 ───→│ Beta │ │ Alpha │←─── a2 ╰───────╯ null←┼─b1(s) │ null←┼─b2 │ ╰──────╯ ========================================= # 14 : Alpha.b1 ──╮ ╭──╮ ╭──────╮ │ │ │ │ Alpha │ ↓ ↓ ╰───┼─b1 (s) │←─── a1 ╭───────╮ null←┼─b2 │ b1 ───→│ Beta │ ←╮ ╰──────╯ ╰───────╯ ╭───────╮ ╭──────╮ b2 ───→│ Beta │ │ Alpha │←─── a2 ╰───────╯ ╰──┼─b1(s) │ null←┼─b2 │ ╰──────╯ ========================================= # 15 : Alpha.b1 ──╮ ╭──╮ ╭──────╮ │ │ │ │ Alpha │ ↓ ↓ ╰───┼─b1 (s) │←─── a1 ╭───────╮ ╭─┼─b2 │ b1 ───→│ Beta │ ←─╯ ╰──────╯ ╰───────╯ ←╮ ╭───────╮ │ ╭──────╮ b2 ───→│ Beta │ │ │ Alpha │←─── a2 ╰───────╯ ╰──┼─b1(s) │ null←┼─b2 │ ╰──────╯ ========================================= # 16 : Alpha.b1 ──╮ ╭──╮ ╭──────╮ │ │ │ │ Alpha │ ↓ ↓ ╰───┼─b1 (s) │←─── a1 ╭───────╮ ╭─┼─b2 │ b1 ───→│ Beta │ ←─╯ ╰──────╯ ╰───────╯ ←─╮ ╭───────╮ │ ╭──────╮ b2 ───→│ Beta │ ←╮│ │ Alpha │←─── a2 ╰───────╯ ╰─┼─b1(s) ╰──┼─b2 │ ╰──────╯ ========================================= # 17 : Alpha.b1 ──╮ ╭──╮ ╭──────╮ null │ │ │ │ Alpha │ null ↓ ↓ ╰───┼─b1 (s) ╰── a1 ╭───────╮ ╭─┼─b2 │ b1 ──╯ │ Beta │ ←─╯ ╰──────╯ ╰───────╯ ←─╮ ╭───────╮ │ ╭──────╮ b2 ──╮ │ Beta │ ←╮│ │ Alpha │←─── a2 ╰───────╯ │╰─┼─b1(s) null ╰──┼─b2 │ ╰──────╯ ========================================= 整理 1 : 把不必要的圖拿掉 Alpha.b1 ──╮ ╭──╮ ╭──────╮ │ │ │ │ Alpha │ ↓ ↓ ╰───┼─b1 (s) │ ╭───────╮ ╭─┼─b2 │ │ Beta │ ←─╯ ╰──────╯ ╰───────╯ ←─╮ ╭───────╮ │ ╭──────╮ │ Beta │ ←╮│ │ Alpha │←─── a2 ╰───────╯ │╰─┼─b1(s) │ ╰──┼─b2 │ ╰──────╯ ========================================= 整理 2 : 由於 b1 是 static , 就算沒有任何 Alpha 實體(或被回收) 這個 field 還是會存在,所以把 b1 從各實體裡面拿掉(比較好觀察) Alpha.b1 ──╮ ╭──────╮ │ │ Alpha │ ↓ │ │ ╭───────╮ ╭─┼─b2 │ │ Beta │ ←─╯ ╰──────╯ ╰───────╯ ╭───────╮ ╭──────╮ │ Beta │ ←╮ │ Alpha │←─── a2 ╰───────╯ │ │ │ ╰──┼─b2 │ ╰──────╯ ========================================== 整理 3 : 由於由上角的 Alpha 可能被回收,所以 b2 的指向可以忽略 Alpha.b1 ──╮ ╭──────╮ │ │ Alpha │ (這是第 12 行產生的) ↓ │ │ ╭───────╮ │ b2 │ │ Beta │ ╰──────╯ ╰───────╯ ╭───────╮ ╭──────╮ │ Beta │ ←╮ │ Alpha │←─── a2 ╰───────╯ │ │ │ ╰──┼─b2 │ ╰──────╯ 這樣就很清楚了,不過不要誤會,右上角的 Alpha 中,還是有 指向其他物件的變數在,只是這樣整理比較好觀察。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.174.21 ※ 編輯: darkk6 來自: 114.47.174.21 (10/25 00:03)

10/25 00:30, , 1F
謝謝d大的圖文解說! 這個圖示畫得很棒,我偷偷筆記一下XD
10/25 00:30, 1F
※ 編輯: darkk6 來自: 114.47.174.21 (10/25 01:02)

10/25 02:40, , 2F
佛心來的,畫圖耶…
10/25 02:40, 2F

10/25 07:59, , 3F
現在都是來拼美術能力的就是了...... [核爆]
10/25 07:59, 3F

10/25 21:01, , 4F
一開始 Alpha.b1 就不要畫在 Alpha instance 裡比較妥當
10/25 21:01, 4F

10/26 09:38, , 5F
這種就是要畫圖就很清楚了啦
10/26 09:38, 5F
文章代碼(AID): #1EfOmcTk (java)
文章代碼(AID): #1EfOmcTk (java)