首頁 > Java > java教程 > 靜態欄位不再被引用時會被垃圾收集嗎?

靜態欄位不再被引用時會被垃圾收集嗎?

Patricia Arquette
發布: 2024-12-16 03:44:18
原創
323 人瀏覽過

Will Static Fields Be Garbage Collected When No Longer Referenced?

靜態欄位的垃圾收集

當靜態欄位不再被引用時,會出現一個關於靜態欄位命運的常見問題。考慮以下用於程式設定的實用程式類別:

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 節:

A class or interface may be unloaded if and only if its defining class loader may be reclaimed by the garbage collector [...] Classes and interfaces loaded by the bootstrap loader may not be unloaded.
登入後複製

因此,載入的類別中的靜態變數不能被回收。垃圾收集,直到相應的類別載入器本身被收集。由於引導類別不可卸載,這些類別中的靜態變數將無限期地保留。

對於 MyUtils,由於它不是由引導類別載入器載入的,因此一旦程式執行,它的靜態 myObject 欄位就會被垃圾收集不再需要 MyUtils,無論是否使用它。

以上是靜態欄位不再被引用時會被垃圾收集嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板