Re: [問題] 關於 Garbage Collection
注意有上色的 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
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
10/25 21:01, 4F
推
10/26 09:38, , 5F
10/26 09:38, 5F
討論串 (同標題文章)