簡體   English   中英

Java:垃圾收集器收集什么?

[英]Java : What is Garbage Collector collecting?

我是GC的新手,我想知道垃圾回收器除了不再被任何變量引用的引用之外還收集什么? 以下是我要檢查的列表

  • 基本類型(int,double,float,char ....)是否得到GC-ed?
  • 靜態變量會被GC編輯嗎?
  • 最終變量是否經過GC檢驗(我認為,因為它被標記為不可變的,所以沒有什么可收集的)?
  • 是否所有方法(靜態方法和非靜態方法)都經過GC處理?
  • 線程是否經過GC編輯?

GC不會收集任何引用,它只是釋放不再可訪問的對象(堆上的內存)。

靜態是特殊的內存位置,並且與類/類加載器關聯。 如果未部署class / classloader,則靜態內容將從內存中刪除。

如果原始類型與對象(類變量)相關聯,那么當對象不可訪問時,它們將被GC化。

如果是局部變量/參數變量,則它們將在堆棧上,因此一旦方法執行完成,便將其回收。

只有對象(實例)才能收集垃圾,而沒有其他東西。

  • 變量不是對象-因此它們不會被gc'd
  • 方法不是對象-沒有gc。
  • 原語-不是對象,沒有gc
  • 線程-線程類實例:是的。

關鍵字static與垃圾回收無關。

垃圾收集僅適用於對象。

•原始類型(int,double,float,char ....)是否獲得GC-ed? -是原始類型對象嗎? 沒有。

•靜態變量是否得到GC檢驗? -是變量對象,是的。

•最終變量是否經過GC檢驗(我認為由於將其標記為不可變的,因此沒有什么可收集的)? -不,他們將接受GC培訓

•是否所有方法(靜態和非靜態)都經過GC檢驗? -方法和類defs會占用內存,但不會占用由GC管理的內存,這取決於最終將隨意創建和銷毀的JVM類型。

•線程是否經過GC編輯? -是的,線程是對象,因此它們經過GC處理。

垃圾收集器僅在堆上工作。 鑒於此,您可以排除靜態變量。

  • 基本類型(int,double,float,char ....)是否得到GC-ed? 如果它們所屬的對象被GC檢驗,則它們被GC檢驗。

  • 靜態變量會被GC編輯嗎? 沒有

  • 最終變量是否經過GC檢驗(我認為,因為它被標記為不可變的,所以沒有什么可收集的)? 如果它們所屬的對象被GC檢驗,則它們被GC檢驗。

  • 是否所有方法(靜態方法和非靜態方法)都經過GC處理? 這沒有多大意義

  • 線程是否經過GC編輯? 如果它們是不再引用的對象,是

垃圾回收確實對在堆上分配的對象起作用,這些對象是通過new創建的所有對象。

  • 不確定原始對象,如果在內部使用對象(例如, new Integer(..)管理,則可以對它們進行GC處理,但是我不確定此處是否裝箱和裝箱,所以我說不,因為JVM有特定的指令來管理它們
  • 靜態變量可以進行GC編輯,因為唯一靜態的是引用,但不是引用的對象
  • final變量可以是GC-ed,它們是final的事實並不意味着您的程序將永遠需要對其進行引用
  • 方法和線程本身並不進行GC,但從這個意義上講,線程始終包含在具有run()方法的對象中,因此可以對其進行GC

GC僅收集程序中沒有任何引用的內存空間,因此按定義收集GC不會發生。 可以收集可以引用對象並可以更改其需求的任何變量,因此可以在某些情況下收集靜態變量,但最終不能! 我無法想象您用GC-ed方法表示什么。在一般的回答中,我應該說方法不是要進行GC-ed的對象狀態的一部分。

垃圾回收是一個巨大的話題,可能對於堆棧溢出答案來說太大了。 有一關於垃圾收集手冊的 好書

暫無
暫無

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

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