問題:
在Java 中,考慮一個假設的實用程式類,僅在程式設定:
class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } }
myObject是否有資格成為垃圾不再需要時進行回收,還是會在整個程序的生命週期中持續存在?
答案:
靜態欄位在載入其類別時不符合垃圾回收條件。只有當負責載入該類別的類別載入器本身被垃圾回收時,它們才能被收集。
根據 Java 語言規格 (JLS) 第 12.7 節「類別和介面的卸載」:
「當且僅當其定義的類別載入器可以被垃圾收集器回收時,類別或介面才可以被卸載[...]載入的類別和介面引導程式可能不會卸載。「
因此,在提供的範例中,只要載入類別MyUtils,myObject 就會持續存在。在載入 MyUtils 的類別載入器也符合垃圾回收資格之前,它不會被垃圾回收。
以上是Java 的垃圾收集器會回收「MyUtils」中的「myObject」等靜態欄位嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!