Q170.
有關於Java 程式語言,下列那些敘述是錯誤的?
電腦軟體設計(JAVA) · 乙級 · Java · Q170
難易度分析
4 / 5
本題為複選題,要求考生對 Java 記憶體管理及垃圾回收機制的細節有精確掌握。選項中包含多個關於物件回收條件與方法執行保證的易混淆概念,必須完整分析各個敘述的正確性才能得出答案,因此提升了整體解題難度。
正確答案 (複選):①, ②, ④
- ① 具有finalize( )方法的物件在程式結束前永遠會先呼叫其finalize( )方法:finalize() 方法由 垃圾回收器 (Garbage Collector) 在回收物件記憶體前呼叫,而非程式結束前保證呼叫;且 JVM 不保證 finalize() 一定會被執行,程式異常終止時可能不會觸發。
- ② 具有finalize( )方法的物件,其記憶體區塊是不可以回收的:具有 finalize() 方法的物件,其記憶體仍可被回收。GC 會在回收前呼叫 finalize(),之後該物件若未重新建立參考關係,記憶體仍會被釋放回 Heap。
- ④ 不再使用的物件,其記憶體區塊會自動被回收:不再使用」不等於「不可達 (Unreachable)」。若物件仍被變數參考,即使程式邏輯上不再使用,GC 也無法回收;且 GC 執行時機由 JVM 決定,不保證立即回收。
錯誤選項解析
- ③ 被目前執行緒存取的物件,其記憶體區塊是不可以回收的:此敘述正確。被目前執行緒存取的物件仍處於可達狀態 (Reachable),GC 不會回收仍被有效參考的物件記憶體,這是垃圾回收的基本可達性分析原則。
Learning Tip
"本題考 Java 垃圾回收機制 (Garbage Collection) 的核心觀念。常考陷阱:① finalize() 不保證被呼叫,且自 Java 9 起已標示為 Deprecated,應改用 Cleaner 或 try-with-resources;② 物件能否被回收取決於是否可達,而非開發者主觀認為「不再使用」;③ GC 執行時機由 JVM 自動調度,不可依賴 System.gc() 保證立即回收。"
學員答題分佈
①具有finalize( )方法的物件在程式結束前永遠會先呼叫其finalize( )方法0%
②具有finalize( )方法的物件,其記憶體區塊是不可以回收的0%
③被目前執行緒存取的物件,其記憶體區塊是不可以回收的0%
④不再使用的物件,其記憶體區塊會自動被回收0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!