作者darkk6 (Mr. Pan)
看板java
標題Re: [問題] 關於 Garbage Collection
時間Tue Oct 25 00:02:44 2011
注意
有上色的 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)
推 mserway:謝謝d大的圖文解說! 這個圖示畫得很棒,我偷偷筆記一下XD 10/25 00:30
※ 編輯: darkk6 來自: 114.47.174.21 (10/25 01:02)
→ cobrasgo:佛心來的,畫圖耶… 10/25 02:40
推 PsMonkey:現在都是來拼美術能力的就是了...... [核爆] 10/25 07:59
→ sbrhsieh:一開始 Alpha.b1 就不要畫在 Alpha instance 裡比較妥當 10/25 21:01
推 swpoker:這種就是要畫圖就很清楚了啦 10/26 09:38