為什麼minor gc比full gc major gc快?

時間 2021-05-30 03:42:57

1樓:RednaxelaFX

以前簡單回答過類似的問題,偷懶放傳送門:CMS與mark-sweep/mark-compact/copying GC的關係

不過那是我的觀點,加入Azul之前的。我們的CTO Gil則有不同的觀點,他漸漸把我說服了。我在上面的傳送門裡寫的是

如果把mark、sweep、compact、copying這幾種動作的耗時放在一起看,大致有這樣的關係:

compaction >= copying > marking > sweeping

還有 marking + sweeping > copying

(雖然compactiont與copying都涉及移動物件,但取決於具體演算法,compact可能要先計算一次物件的目標位址,然後修正指標,然後再移動物件;copying則可以把這幾件事情合為一體來做,所以可以快一些。

另外還需要留意GC帶來的開銷不能只看collector的耗時,還得看allocator一側的。如果能保證記憶體沒碎片,分配就可以用pointer bumping方式,只有挪乙個指標就完成了分配,非常快;而如果記憶體有碎片就得用freelist之類的方式管理,分配速度通常會慢一些。) 而Gil認為marking其實才是GC裡最慢的動作,因為marking不可避免的是pointer-chasing,而其它動作都可以是對堆的線性掃瞄,兩者的空間區域性性(space locality)差別很大。

但當然,真的說耗時狀況的話還得看活物件數量、堆大小等的條件,很難籠統的說誰一定比誰快,只能說誰更適合哪種場景。

2樓:Ted Mosby

更新 2/6/2017 PDT

加個傳送門

Major GC和Full GC的區別是什麼?觸發條件呢?(我的回答)

更新 9/18/2015 PDT

如果需要精確定義,是直接指出具體的gc演算法名稱(上面已羅列了主要的幾種精確定義的演算法)。

另,生產環境要盡量避免full gc,而不是去調優它。這是乙個kitechen sink(或者說,last-resort)方法。

嚴格說,full gc 不等於 minor GC + major GC,這三者是三個不同的概念

minor gc在新生代

major gc在老生代

full gc在整個heap上(甚至包括永生代,或者說新的metaspace)

這個基礎概念是可以套到具體的gc 演算法組合

parallelYoung + parallelOld (full gc for parallelGC)

ParNew + CMS (full gc for CMS gc)

g1 gc的情況又不同,有g1 young,然後有g1 mixed(包含新生代和部分選擇的老生代),最後還有full gc for g1,以應對前兩者無法handle的情況

3樓:

Update

原答案並不準確,major GC和full GC並沒有明確的定義區分major GC之所以要慢的主要原因:

1. 如果認為major GC是負責老生代:原因是old generation的分配空間比new generation要大幾倍,可以通過-XX:

NewRatio進行調整(hotspot預設為2);

2. 如果認為major GC可以等同於full GC:那麼原因就是原來的答案,full GC負責了Eden區,Survivor區以及Old區,那麼自然速度是要比minor GC要慢很多。

不對的地方煩請指正

Origin

minor GC清理的是Young space,major GC清理的是Tenured space

full gc = minor GC + major GC

為什麼高興比悲傷好 為什麼積極比消極好?

歐陽Marry 其實很正常吧 高興的時候會想著很多積極樂觀的事情,那麼在做事情的時候會提起很多興趣,而悲傷的時候腦子裡全是悲觀的畫面,做事情都提不起興趣,那麼最終這件事情的結果是怎樣的呢?這些是最易懂的道理 另外,積極比消極好,是因為這根人的心態有關,積極的人你會發現他們就像塞翁失馬一樣,同時也會讓...

為什麼有人認為詹姆斯比科比強?

有趣的世界 我喜歡詹姆斯。科比不評價。大概是因為了解他的付出,甚至亞軍都成了黑點。我不評價他們誰更強,只是作為粉絲還是希望他被公平的看待一點。 阿姆斯特朗迴旋炮 因為444強過512啊,頂級球星比什麼?就是比超巨三標配,戒指m和fm,這也是喬丹比詹姆斯地位更高的原因,畢竟444不如665。 秦君 如...

為什麼kendrick Lamar比J cole火這麼多?

不雨 cole的詞絕對是第一梯隊,就是越聽越琢磨越有韻味的那種,flow也在不斷進步,但是製作的話就有點顯老了,山林駕駛和4YEO還是可以的,敘事還是要穩點,但是KOD就很難受了,明明是主打trap專可還是不太舒服,擺脫不了cole的那種憂鬱冷靜的氣質,只能說是cole對trap不算成功的一次探索,...