[英]Java Static Classes lifetime
如何收集Java靜態類垃圾?
我有一個靜態類,它包含一個靜態對象。 如果我將對象設置為null,那么它將被垃圾回收。 我不了解靜態類的生命周期。 程序關閉時是否收集了垃圾?
靜態對象與類定義相關聯,而不與類實例相關聯。
它們一旦通過ClassLoader 加載類就會生效,只有在卸載類時才會銷毀它們。
靜態類始終可訪問,因此永遠不會收集垃圾。
現在,如果您的靜態類具有其非靜態類的字段和實例,並且將其設置為null,則該內存將被釋放,因為不再引用該對象。
例如
public static StaticClass
{
public static InstanceClass myInstanceClass;
}
如果你將myInstanceClass
設置為null,那么它將被垃圾收集。
- static
類只能在類級別而不是包級別 ,我們可以說static inner classes
或Top level classes
。
-然后由類加載器加載static
類。
-現在static
類將進入內存,直到加載它的加載器仍在運行或除非加載器沒有卸載它。
想一想:
每個對象都有對其類的引用。
每個類都有對其類加載器的引用。
每個類加載器都引用它所加載的每個類 。
這整個混亂的球可能變成垃圾。 這是(在servlet容器中)卸載/重新加載應用程序的基礎。 但是,如果仍然有一個對象仍然被引用,則無法卸載類加載器及其所有類,因此實現應用程序卸載並不是一件容易的事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.