簡體   English   中英

Java靜態類生命周期

[英]Java Static Classes lifetime

如何收集Java靜態類垃圾?

我有一個靜態類,它包含一個靜態對象。 如果我將對象設置為null,那么它將被垃圾回收。 我不了解靜態類的生命周期。 程序關閉時是否收集了垃圾?

靜態對象與類定義相關聯,而不與類實例相關聯。

它們一旦通過ClassLoader 加載類就會生效只有在卸載類時才會銷毀它們。

靜態類始終可訪問,因此永遠不會收集垃圾。

現在,如果您的靜態類具有其非靜態類的字段和實例,並且將其設置為null,則該內存將被釋放,因為不再引用該對象。

例如

public static StaticClass
{
    public static InstanceClass myInstanceClass;
}

如果你將myInstanceClass設置為null,那么它將被垃圾收集。

- static只能在類級別而不是包級別 ,我們可以說static inner classesTop level classes

-然后由類加載器加載static類。

-現在static類將進入內存,直到加載它的加載器仍在運行或除非加載器沒有卸載它。

想一想:

每個對象都有對其類的引用。

每個類都有對其類加載器的引用。

每個類加載器都引用它所加載的每個類

這整個混亂的球可能變成垃圾。 這是(在servlet容器中)卸載/重新加載應用程序的基礎。 但是,如果仍然有一個對象仍然被引用,則無法卸載類加載器及其所有類,因此實現應用程序卸載並不是一件容易的事。

暫無
暫無

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

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