作者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)
1F:推 mserway:谢谢d大的图文解说! 这个图示画得很棒,我偷偷笔记一下XD 10/25 00:30
※ 编辑: darkk6 来自: 114.47.174.21 (10/25 01:02)
2F:→ cobrasgo:佛心来的,画图耶… 10/25 02:40
3F:推 PsMonkey:现在都是来拼美术能力的就是了...... [核爆] 10/25 07:59
4F:→ sbrhsieh:一开始 Alpha.b1 就不要画在 Alpha instance 里比较妥当 10/25 21:01
5F:推 swpoker:这种就是要画图就很清楚了啦 10/26 09:38