Gen 0: 因此,當gen 0超過大小閾值時,我讀取了gen 0觸發器。但我也讀到,GC不是在「新」上執行的,因爲「新」只是向前推進一個地址。那麼,它什麼時候檢查它已經超過了觸發gen 0 GC的閾值?何時gen 0,gen 1,gen 2準確觸發?
Gen 1/2: 第1/2代有其自己的大小閾值觸發GC?他們什麼時候考慮門檻?是倖存者晉升爲創世紀的時候嗎?
這是否意味着一個gen 1 GC發生,它首先檢查gen 0,然後將它們升級到gen 1,只發現gen 1已經超過閾值,因此它檢查gen 1,並再次檢查gen 0?
這是否意味着第2代GC發生首先檢查第0代,然後將它們提升到第1代,只發現第1代已超過閾值,因此它檢查第1代,並再次檢查第0代。然後促使第0代第1代和第1代第2代,只發現第2代已超過閾值,因此它再次檢查第2代,第1代和第0代?
所有這些細節都是專有的內部實施細節,因實施情況而異,並隨時可能發生變化。另外,GC在其自己的線程上運行,因此線程調度也是一個因素。如果你能說出你爲什麼在意,那將有助於你得到更好的答案。例如,如果你關心的是,因爲你想知道什麼時候你有一個昂貴的收藏發生在一個不好的時間,那麼你可以在不知道GC的內部細節的情況下找到它。 –
我很在乎,因爲我必須向完全不瞭解GC的人解釋,我發現我只知道效果,但我不知道原因。我也不知道哪些不是實現細節,哪些是我不需要解釋的。 –
如果你關心什麼時候GC啓動,你做錯了。 – leppie