Re: [問題] 資源回收的問題
※ 引述《SusanTakumi (〒△〒被水桶了...)》之銘言:
: Dear 大家,
: 這題是 SCJP JAVA 6.0 的習題
: @@" 看半天還是不知道為什麼
: 所以上來請教大家一下
: class Beta {
: }
: class Alpha {
: static Beta b1;
: Beta b2;
: }
: public class Tester {
00 : public static void main(String[] args) {
01 : Beta b1 = new Beta();
02 : Beta b2 = new Beta();
03 : Alpha a1 = new Alpha();
04 : Alpha a2 = new Alpha();
05 : a1.b1 = b1;
06 : a1.b2 = b1;
07 : a2.b2 = b2;
08 : a1 = null;
09 : b1 = null;
10 : b2 = null;
: // 做一些事情
: }
: }
在 00 結束
Alpha.b1
└→┌──┐
│null│
└──┘
目前有 0 個物件等待被回收
在 01 結束
Alpha.b1
└→┌──┐
│null│
└──┘
b1@main
└──→┌────┐
│Beta實體│
└────┘
目前有 0 個實體等待被回收
在 02 結束
Alpha.b1
└→┌──┐
│null│
└──┘
b1@main b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│ │Beta實體│
└────┘ └────┘
目前有 0 個實體等待被回收
在 03 結束
Alpha.b1
└→┌──┐
│null│
└──┘
b1@main b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│ │Beta實體│
└────┘ └────┘
目前有 0 個實體等待被回收
在 04 結束 *a1.b1 編譯後 等同 Alpha.b1
Alpha.b1 [a1.b1]
└→┌──┐
│null│
└──┘
b1@main b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│ │Beta實體│
└────┘ └────┘
a1@main
└──→┌──-──┐
│Alpha實體│
│┌─┐ │
││b2│ │
│└┼┘ │
└─┼-──┘
└→null
目前有 0 個實體等待被回收
在 05 結束 *a2.b1 編譯後 等同 Alpha.b1
Alpha.b1 [a1.b1][a2.b1]
└→┌──┐
│null│
└──┘
b1@main b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│ │Beta實體│
└────┘ └────┘
a1@main a2@main
└──→┌──-──┐ └──→┌──-──┐
│Alpha實體│ │Alpha實體│
│┌─┐ │ │┌─┐ │
││b2│ │ ││b2│ │
│└┼┘ │ │└┼┘ │
└─┼-──┘ └─┼-──┘
└→null └→null
目前有 0 個實體等待被回收
在 06 結束
Alpha.b1 [a1.b1][a2.b1]
│
│
│
b1@main ↓ b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│←┐ │Beta實體│
└────┘ │ └────┘
a1@main │a2@main
└──→┌──-──┐ │└──→┌──-──┐
│Alpha實體│ │ │Alpha實體│
│┌─┐ │ │ │┌─┐ │
││b2│ │ │ ││b2│ │
│└┼┘ │ │ │└┼┘ │
└─┼-──┘ │ └─┼-──┘
└────┘ └→null
目前有 0 個實體等待被回收
在 07 結束
Alpha.b1 [a1.b1][a2.b1]
│
│
│
b1@main ↓ b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│←┐ │Beta實體│←┐
└────┘ │ └────┘ │
a1@main │a2@main │
└──→┌──-──┐ │└──→┌──-──┐ │
│Alpha實體│ │ │Alpha實體│ │
│┌─┐ │ │ │┌─┐ │ │
││b2│ │ │ ││b2│ │ │
│└┼┘ │ │ │└┼┘ │ │
└─┼-──┘ │ └─┼-──┘ │
└────┘ └────┘
目前有 0 個實體等待被回收
在 08 結束
Alpha.b1 [a1.b1][a2.b1]
│
│
│
b1@main ↓ b2@main
└──→┌────┐ └──→┌────┐
│Beta實體│←┐ │Beta實體│←┐
└────┘ │ └────┘ │
a1@main │a2@main │
↓ ┌──-──┐ │└──→┌──-──┐ │
null │Alpha實體│ │ │Alpha實體│ │
│┌─┐ │ │ │┌─┐ │ │
││b2│ │ │ ││b2│ │ │
│└┼┘ │ │ │└┼┘ │ │
└─┼-──┘ │ └─┼-──┘ │
└────┘ └────┘
目前有 1 個實體等待被回收,Alpha 實體
在 09 結束
Alpha.b1 [a1.b1][a2.b1]
│
│
│
b1@main ↓ b2@main
↓ ┌────┐ └──→┌────┐
null │Beta實體│←┐ │Beta實體│←┐
└────┘ │ └────┘ │
a1@main │a2@main │
↓ ┌──-──┐ │└──→┌──-──┐ │
null │Alpha實體│ │ │Alpha實體│ │
│┌─┐ │ │ │┌─┐ │ │
││b2│ │ │ ││b2│ │ │
│└┼┘ │ │ │└┼┘ │ │
└─┼-──┘ │ └─┼-──┘ │
└────┘ └────┘
目前有 1 個實體等待被回收,Alpha 實體
在 10 結束
Alpha.b1 [a1.b1][a2.b1]
│
│
│
b1@main ↓ b2@main
↓ ┌────┐ ↓ ┌────┐
null │Beta實體│←┐null │Beta實體│←┐
└────┘ │ └────┘ │
a1@main │a2@main │
↓ ┌──-──┐ │└──→┌──-──┐ │
null │Alpha實體│ │ │Alpha實體│ │
│┌─┐ │ │ │┌─┐ │ │
││b2│ │ │ ││b2│ │ │
│└┼┘ │ │ │└┼┘ │ │
└─┼-──┘ │ └─┼-──┘ │
└────┘ └────┘
目前有 1 個實體等待被回收,Alpha 實體
: 當程式執行到"做一些事情",有多少物件有資格被資源回收?
: A. 0
: B. 1
: C. 2
: D. 3
: E. 4
: F. 5
: 答案:
: B 是正確的。
: 很清楚的,
: a2 有指涉到一個物件,
: a2.b2有指涉到一個物件。
: 可能比較看不清楚的是,
: 你仍然可能透過 a2.b1 這個靜態變數來存取另外一個 Beta 物件,
: 因為那個變數是靜態的。
: ...
: 解答如上所示
: 但是它沒有交代的是
: 究竟是那一個變數有資格被資源回收?
: 所以我一直不是很了解
: 感謝大家
※ 引述《SusanTakumi (〒△〒被水桶了...)》之銘言:
: Dear 大家,
: 這題是 SCJP JAVA 6.0 的習題
: @@" 看半天還是不知道為什麼
: 所以上來請教大家一下
: class Beta {
: }
: class Alpha {
: static Beta b1;
: Beta b2;
: }
: public class Tester {
: public static void main(String[] args) {
: Beta b1 = new Beta();
: Beta b2 = new Beta();
: Alpha a1 = new Alpha();
: Alpha a2 = new Alpha();
: a1.b1 = b1;
: a1.b2 = b1;
: a2.b2 = b2;
: a1 = null;
: b1 = null;
: b2 = null;
: // 做一些事情
: }
: }
: 當程式執行到"做一些事情",有多少物件有資格被資源回收?
: A. 0
: B. 1
: C. 2
: D. 3
: E. 4
: F. 5
: 答案:
: B 是正確的。
: 很清楚的,
: a2 有指涉到一個物件,
: a2.b2有指涉到一個物件。
: 可能比較看不清楚的是,
: 你仍然可能透過 a2.b1 這個靜態變數來存取另外一個 Beta 物件,
: 因為那個變數是靜態的。
: ...
: 解答如上所示
: 但是它沒有交代的是
: 究竟是那一個變數有資格被資源回收?
: 所以我一直不是很了解
: 感謝大家
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.163.135.112
推
05/14 08:13, , 1F
05/14 08:13, 1F
討論串 (同標題文章)