JVM_2 內存模型和GC種類

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
上述設計不合理,會有碎片問題。

在這裏插入圖片描述
怎麼知道對象的年齡呢? 對象頭中會有記錄的(見前文的圖片)
young存滿了,又會young gc,又有碎片問題。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
young會gc,沒有eden或s0 S1 gc的概念。

在這裏插入圖片描述
一旦 OLD區都沒有空間了,就會OOM。

在這裏插入圖片描述
在這裏插入圖片描述

算法:
在這裏插入圖片描述

【標記-清除】 會掃描整個堆,比較耗時。會產生大量不連續的空間。
在這裏插入圖片描述
【標記-整理】:比較耗時
在這裏插入圖片描述
【標記-複製】像s0,s1那樣,分出一半空間,將活的複製到另外一半。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
上邊的英文告訴了怎麼選擇GC種類。內存比較少<100M或單核就用serial。CMS和G1停頓時間最少。


適用於young和old的收集器的可以的選擇如下圖:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
CMS和G1很重要,理解下
CMS適用於老年代。G1適用於新生和老年。

serial收集示例,要暫停其他線程。stop the world 即STW。垃圾回收線程暫停課用戶線程。
在這裏插入圖片描述
serial算法是對【標記-複製】算法的落地。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
cms:
在這裏插入圖片描述
【初始標記】爲什麼要stw呢?因爲要確定根節點,所以暫停業務代碼。單線程即可,非常快的過程。
【併發標記】只是增量標記。
【重新標記】又會stw。爲什麼多線程呢?因爲前一步多線程的線程池已經開了,開銷已經在了。

G1:現在主流在用。能設置停頓時間。G1是jdk7引入的。
解決CMS不能解決的。
在這裏插入圖片描述

另外:jdk11中新增了 ZGC回收器。

缺點:java任何GC都會stop the world即停頓。

在這裏插入圖片描述
【生產環境如何選擇GC呢】
在這裏插入圖片描述
什麼公司一般不調呢?因爲一般加機器內存了,哈哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章