簡體   English   中英

static 列表中的對象是否符合垃圾回收條件?

[英]Are objects inside a static list eligible for garbage collection?

我知道只要加載了 class,static 變量就沒有資格進行垃圾回收,但我想知道 object 的內容是否也是如此。 我有這個 static 列表,其中包含 class object 參考。 如果沒有人引用“someObject”,是否有資格進行垃圾回收?

private static List<SomeObject> mylist = new ArrayList<>();

我想知道它的 object 內容是否也是這種情況。

是的,對象的內容是一樣的。 以及它們的內容。 以及它們的內容……等等。

object 如果您的應用程序的某些部分可以在將來的某個時間點嘗試訪問它,則它是可訪問的。

或者另一種表達方式(在實踐中1 )是 object 是可到達的,如果通過引用鏈從 GC 根開始到它有一條路徑 Static 變量是 GC 根,線程棧也是。


如果沒有人引用“someObject”,是否有資格進行垃圾回收?

如果 object 在列表中,則它被列表引用。 如果列表是可達的,那么它的內容也是可達的。


1 - 理論上,編譯可以確定雖然存在指向 object 的路徑,但實際上永遠不會遵循該路徑。 但是,這需要編譯器進行一些困難/昂貴的分析。 所以這是一種通常不會嘗試的優化方法,除非在有限的情況下; 例如,當不再使用 scope 中的變量時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM