说不定它更好用!新一代垃圾回收器ZGC,带你探索并实践下
很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰 , 作为新一代的低延迟垃圾回收器 , ZGC在大内存低延迟服务的内存管理和回收方面 , 有着非常不错的表现 。 本文从GC之痛、ZGC原理、ZGC调优实践、升级ZGC效果等维度展开 , 详述了ZGC在美团低延时场景中的应用 , 以及在生产环境中取得的一些成果 。 希望这些实践对大家有所帮助或者启发 。
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器 , 它的设计目标包括:
- 停顿时间不超过10ms;
- 停顿时间不会随着堆的大小 , 或者活跃对象的大小而增加;
- 支持8MB~4TB级别的堆(未来支持16TB) 。
- GC之痛:介绍实际业务中遇到的GC痛点 , 并分析CMS收集器和G1收集器停顿时间瓶颈;
- ZGC原理:分析ZGC停顿时间比G1或CMS更短的本质原因 , 以及背后的技术原理;
- ZGC调优实践:重点分享对ZGC调优的理解 , 并分析若干个实际调优案例;
- 升级ZGC效果:展示在生产环境应用ZGC取得的效果 。
CMS与G1停顿时间瓶颈在介绍ZGC之前 , 首先回顾一下CMS和G1的GC过程以及停顿时间的瓶颈 。 CMS新生代的Young GC、G1和ZGC都基于标记-复制算法 , 但算法具体实现的不同就导致了巨大的性能差异 。
标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中 。 标记-复制算法可以分为三个阶段:
- 标记阶段 , 即从GC Roots集合开始 , 标记活跃对象;
- 转移阶段 , 即把活跃对象复制到新的内存地址上;
- 重定位阶段 , 因为转移导致对象的地址发生了变化 , 在重定位阶段 , 所有指向对象旧地址的指针都要调整到对象新的地址上 。
文章插图
G1的混合回收过程可以分为标记阶段、清理阶段和复制阶段 。
标记阶段停顿分析
- 初始标记阶段:初始标记阶段是指从GC Roots出发标记全部直接子节点的过程 , 该阶段是STW的 。 由于GC Roots数量不多 , 通常该阶段耗时非常短 。
- 并发标记阶段:并发标记阶段是指从GC Roots开始对堆中对象进行可达性分析 , 找出存活对象 。 该阶段是并发的 , 即应用线程和GC线程可以同时活动 。 并发标记耗时相对长很多 , 但因为不是STW , 所以我们不太关心该阶段耗时的长短 。
- 再标记阶段:重新标记那些在并发标记阶段发生变化的对象 。 该阶段是STW的 。
- 清理阶段清点出有存活对象的分区和没有存活对象的分区 , 该阶段不会清理垃圾对象 , 也不会执行存活对象的复制 。 该阶段是STW的 。
- 复制算法中的转移阶段需要分配新内存和复制对象的成员变量 。 转移阶段是STW的 , 其中内存分配通常耗时非常短 , 但对象成员变量的复制耗时有可能较长 , 这是因为复制耗时与存活对象数量与对象复杂度成正比 。 对象越复杂 , 复制耗时越长 。
- R2|「集微拆评」坚果R2评测:旗舰配置加独有功能,手机更好用了
- 微软启用新方式优化Win10:更好用了
- 时尚好用价格亲民,年轻人的轻奢级投影,当贝D3X投影仪评测
- 分享一款好用的下载软件#免费#纯粹#小巧,甚至忽略掉它的存在
- 让iPhone 11手机更好用,5款实用配件精选
- 拍照与视频都更好用的次旗舰 富士X-S10无反真机上手
- 经常用OPPO手机,记得打开这6个设置,让你的手机更好用
- 微信怎样发送100M的视频,方法简单超好用,很多人还不知道
- 超好用的UnixLinux 命令技巧 大神为你详细解读
- 免提现手续费,还比支付宝、微信支付更好用,数字货币砍获高评价