CMS
CMS堆內(nèi)存和以往的垃圾回收器一樣物遇,分為新生代和老年代,新生代和老年代是物理隔離的憾儒。
image.png
這些space必須是地址連續(xù)的空間。
G1
G1打破了以往將收集范圍固定在新生代或老年代的模式乃沙,GI 將 Java 堆空間分割成了若干相同大小的 區(qū)域起趾,即 region,包括 Eden警儒、
Survivor训裆、 Old、 Humongous 四種類型蜀铲。其中边琉, Humongous 是特殊的 Old 類型,專門 放置大型對象记劝。這樣的劃分方式意昧著不需要一個連續(xù)的內(nèi)存空間管理對象变姨。 GI 將 空間分為多個區(qū)域,優(yōu)先回收垃圾最多的 區(qū)域厌丑。 GI 采用的是 好的空間整合能力’不會產(chǎn)生大量的空間碎片定欧。
Region的數(shù)值是在1M到32M字節(jié)之間的一個2的冪值數(shù),JVM會盡量劃分2048個左右怒竿、同等大小的Region砍鸠。
GI 的一大優(yōu)勢在于可預(yù)測的停頓時間, 能夠盡可能快地在指定時間內(nèi)完成垃圾回收任務(wù)耕驰。在 JDKl l 中爷辱,已經(jīng)將 GI 設(shè)為默認(rèn) 垃圾回收器。
image.png
ZGC
和G1類似,但ZGC的region的大小更加靈活和動態(tài)饭弓。zgc的region不會像G1那樣在一開始就被劃分為固定大小的region双饥。
zgc的region核心亮點(diǎn)就是:動態(tài)。
動態(tài)表現(xiàn)為:
- 動態(tài)地創(chuàng)建和銷毀示启。
- 動態(tài)地決定region的大小兢哭。它的最小單位是2MB的一個塊。然后每個region的大小就是是2MB*N就是夫嗓。
而且他有個概念叫:size groups迟螺。有三種:
- Small:就是一個2MB的region。
- Medium:32mb舍咖。2MB*16矩父。
- Large:N*2MB。
整個heap長這樣:
image