https://juejin.cn/post/7316202730955522074
ZGC(Z Garbage Collector)的内存布局与G1(Garbage-First)在内存布局上有些相似,都采用了基于Region的堆内存布局。ZGC在内存布局方面引入了一些动态性的概念,Region的大小不是固定不变的,也不会区分新生代、老年代区域(实际在JDK21中又引入了新老年代分区的概念,后续我会继续跟踪出一版新的原理),使得它更加灵活和适应不同场景。
ZGC的内存布局主要涉及到动态创建、动态销毁以及动态的区域容量大小,以下是ZGC内存布局的一些关键特点:
- 动态创建: ZGC的Region可以根据需要动态创建,系统可以根据应用程序的实际内存需求,动态生成新的内存区域,以适应不同的工作负载。
- 动态销毁: 类似地,ZGC的Region也可以根据垃圾回收的情况动态销毁,当某个区域内的对象被回收后,该区域可以被标记为可用,随后可以被重新分配或销毁,以便更好地管理内存。
- 动态的区域容量大小: ZGC引入了不同大小的Region,包括Small Region(2MB)、Medium Region(32MB)和Large Region(可变大小),使得ZGC在内存分配时能够更好地适应不同大小的对象,提高内存利用率。

如上图所示,ZGC的Region分类包括:
- Small Region(小区域): 大小为2MB,用于存放小于256KB的小对象。这有助于提高小对象的分配和回收效率。
- Medium Region(中等区域): 大小为32MB,用于存放大于等于256KB但小于4MB的对象。中等区域的引入有助于处理中等大小的对象。
- Large Region(大区域): 大区域的大小是可变的,最小为4MB。每个大区域只用于存放一个大对象,且不会被重新分配,这有助于处理大对象,减少内存碎片化。
这种动态的内存布局设计使得ZGC能够更好地适应不同的工作负载和对象分布模式。它能够在提供低延迟的同时,更加高效地管理内存空间,降低内存碎片化的程度。
作者:浣熊say链接:https://juejin.cn/post/7316202730955522074来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。