Re: [問題] 資源回收的問題

看板java作者 (非天夜翔)時間12年前 (2012/05/13 22:25), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
@@" 感謝你 csihcs大
05/14 08:13, 1F
文章代碼(AID): #1FhyHgvQ (java)
討論串 (同標題文章)
文章代碼(AID): #1FhyHgvQ (java)