当前位置:网站首页>cms 和 g1的主要區別

cms 和 g1的主要區別

2022-06-09 06:23:00 lixia0417mul2

cms和g1的主要區別
1.cms是內存分布式分代連續的,也就是新生代一塊連續的區間,年老代一塊連續的區間,而g1是把堆分成了2048個region,每個區域region可以作為新生代也可以作為年老代,並且新生代的大小(也即region的個數)是根據期望的暫停時間動態調整的.
2.cms中大對象是直接分配到年老代的,而且ygc是沒法回收年老代中的大對象的,必須要通過cms gc才能回收,而g1中大對象是直接分配到Humongous大對象區域的(不過該區域一般認為是年老代),這裏g1比較好的一點是ygc的時候就可以回收掉沒有引用的大對象了,而不用等到mixed gc再回收
3.cms的主要步驟有:初始標識(stw),並發標識,重新標識(stw),並發清理(cms的清理階段是和應用線程並發進行的,使用的是標記清除算法,會產生大量的內存碎片); g1的mixed gc中的全局並發標識階段的主要步驟有:初始標識(stw),並發標識,重新標識(stw),初始清理(stw),並發清理, 混合gc中的初始清理+並發清理作用只是回收完全沒有引用的region,然後計算要回收的region中垃圾的占比,排好序後為後面混合gc的時候加入CSet回收集中做好准備,比如為後面的8次gc回收做好計劃,如每次回收把哪些region加入到cset集合中,真正的回收操作是緊跟著的mixed gc的evacuation階段,在evacuation階段中會分8次回收全局並發標識階段標記的Region,使用的是標記整理的算法,不會產生內存碎片.
4.g1比cms會使用更多的內存和cpu負載,所以更適合用於大堆的應用

原网站

版权声明
本文为[lixia0417mul2]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/160/202206090623128907.html