面试官:ZGC 原理是什么,它为什么能做到低延时?

简介: 哈喽,大家好,我是指北君。PS:最近是跳槽的高峰期,我连日加班好多天,整理出了包含16000 多道面试题的面试宝典,并且指北君也会持续更新这份面试宝典中的题目,希望它能帮助大家找到自己心仪的工作!

本期指北君为大家分享 ZGC 垃圾回收器,它的诞生目标就极为诱人:

①、支持TB级堆内存(最大4T)

②、最大GC停顿10ms

③、对吞吐量影响最大不超过15%

ZGC 应该是后面Java项目会采用的主流垃圾回收器,也是 JDK17 默认的垃圾回收器,话不多说,本篇文章指北君为大家介绍:ZGC 原理是什么,以及它为什么能做到低延时?

30.jpg

作为一个长期从事电商工作的coder,大家知道电商交易讲究的准确、速度快。我们选取的主语言是Java,因为其生态实在是太强大了,但是Java的垃圾回收机制,会有 STW(Stop The World)产生,简单来说就是由于垃圾回收机制,会产生停顿现象。

众所周知,GC停顿对响应时间还是有很大的影响的,为了降低GC停顿对系统可用性的影响,我们从降低单次GC时间和降低GC频率两个角度出发进行了调优,包括JVM参数调优,以及更换垃圾回收器,从 CMS 到 G1垃圾回收器等等,但是效果都不太理想。

直到遇到了 ZGC。话不多说,直接开始吧!


31.gif


1、官方介绍

为了保证介绍的足够官方,足够权威,我们先看看官方介绍:

36.jpg

核心理念:

  • 停顿时间不超过10ms;
  • 停顿时间不会随着堆的大小,或者活跃对象的大小而增加;
  • 支持8MB~4TB级别的堆(未来支持16TB)。

这样响应了本文标题:ZGC 确实是低延时。

2、垃圾回收优化历程

为了降低 GC 延时,我们通常有这样几种解决思路:

①、缩短单次 GC 回收时间;

②、并发进行回收(CMS垃圾回收器,只能做到一部分并发);

③、只回收部分垃圾(G1垃圾回收器,打开新的大门);

④、ZGC(单独拿出来)

3、ZGC 原理

讲到这,开始正式进入主题:为什么 ZGC 能够做到低延时?

咱们看图说话:

33.jpg



低延时结论:

ZGC在标记、转移和重定位阶段几乎都是并发。

在【初始标记】、【再标记】、【初始转移】这三个阶段只有 GC 线程,这就表示这三个阶段是 STW 的。其中,初始标记和初始转移分别都只需要扫描所有GC Roots,其处理时间和GC Roots的数量成正比,一般情况耗时非常短;再标记阶段STW时间很短,最多1ms,超过1ms则再次进入并发标记阶段。即,ZGC几乎所有暂停都只依赖于GC Roots集合大小,停顿时间不会随着堆的大小或者活跃对象的大小而增加。

关键技术

ZGC通过着色指针和读屏障技术,解决了转移过程中准确访问对象的问题,实现了并发转移。

GC 线程在转移对象的过程中,假设不是 STW,这也是 G1 垃圾收集器慢的原因(G1这个阶段会 STW),那么应用线程也在不断的访问对象,假设对象转移,但对象地址没有及时更新,就会造成访问旧地址的错误。

在ZGC中,应用线程访问对象将触发“读屏障”,如果发现对象被移动了,那么“读屏障”会把读出来的指针更新到对象的新地址上,这样应用线程始终访问的都是对象的新地址。那么,JVM是如何判断对象被移动过呢?就是利用对象引用的地址,即着色指针。

关于“读屏障”和“着色指针”的概念,我这里就不做过多的描述了。34.gif

4、ZGC 缺点

ZGC 快是快,特别是对于大堆和即时响应的系统特别有用,但是还是存在缺点的:

①、并发标记阶段是全堆标记,如果回收速度跟不上对象分配速度,会导致对象分配停顿。

②、GC线程并发导致 CPU 飙高。

怎么用大家做好取舍。

5、小结

好了,这就是JDK中ZGC 的介绍,赶紧用起来吧。

我是指北君,操千曲而后晓声,观千剑而后识器。感谢各位人才的:点赞、收藏和评论,我们下期更精彩!

面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!





相关文章
|
2月前
|
中间件 数据库连接 API
Python面试:FastAPI框架原理与实战
【4月更文挑战第18天】FastAPI是受欢迎的高性能Python Web框架,以其简洁的API设计、强大的类型提示和优秀的文档生成能力著称。本文将探讨FastAPI面试中的常见问题,包括路由、响应对象、Pydantic模型、数据库操作、中间件和错误处理。同时,还会指出一些易错点,如类型提示不准确、依赖注入误解,并提供实战代码示例。通过理解和实践FastAPI,可以在面试中展示出色的Web开发技能。
68 1
|
2月前
|
机器学习/深度学习 SQL 分布式计算
Spark核心原理与应用场景解析:面试经验与必备知识点解析
本文深入探讨Spark核心原理(RDD、DAG、内存计算、容错机制)和生态系统(Spark SQL、MLlib、Streaming),并分析其在大规模数据处理、机器学习及实时流处理中的应用。通过代码示例展示DataFrame操作,帮助读者准备面试,同时强调结合个人经验、行业趋势和技术发展以展现全面的技术实力。
|
1月前
|
XML 前端开发 Java
java面试题之个人对SpringMvc的原理实现理解
java面试题之个人对SpringMvc的原理实现理解
|
2月前
|
Android开发 移动开发 小程序
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
binder机制原理面试,安卓app开发教程
|
2月前
|
算法 网络协议 安全
HTTP 原理和面试题
HTTP 原理和面试题
|
10天前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
17 2
|
16天前
|
存储 算法 Java
闲鱼面试:说说JWT工作原理?
闲鱼面试:说说JWT工作原理?
15 0
闲鱼面试:说说JWT工作原理?
|
17天前
|
负载均衡 Dubbo Java
哈啰面试:说说Dubbo运行原理?
哈啰面试:说说Dubbo运行原理?
18 0
哈啰面试:说说Dubbo运行原理?
|
20天前
|
设计模式 网络安全 开发工具
|
2月前
|
机器学习/深度学习 编解码 算法
算法工程师面试问题总结 | YOLOv5面试考点原理全解析
本文给大家带来的百面算法工程师是深度学习目标检测YOLOv5面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答及其理论基础,以帮助求职者更好地准备面试。通过对这些问题的理解和回答,求职者可以展现出自己的深度学习目标检测领域的专业知识、解决问题的能力以及对实际应用场景的理解。同时,这也是为了帮助求职者更好地应对深度学习目标检测岗位的面试挑战,提升面试的成功率和竞争力。