首页 > 编程语言 >Java工程师必备-一些资料的整理

Java工程师必备-一些资料的整理

时间:2023-11-01 21:35:04浏览次数:34  
标签:Java G1 工程师 停顿 必备 回收 GC ZGC CMS

[Java工程师必备+学习+知识点+面试]:包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE、RabbitMQ、RocketMQ、Pulsar、Kafka、Zookeeper、Linux、设计模式、智力题、项目架构、分布式相关、算法、面试题

file

file

file

最近在我的github仓库更新了ZGC相关的资料整理 https://github.com/Swayingleaves/JavaDeveloperBrain/tree/master

ZGC收集器

ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:

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

从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低延时场景中的应用和卓越表现,文章内容主要分为四部分:

GC之痛:介绍实际业务中遇到的GC痛点,并分析CMS收集器和G1收集器停顿时间瓶颈; ZGC原理:分析ZGC停顿时间比G1或CMS更短的本质原因,以及背后的技术原理; ZGC调优实践:重点分享对ZGC调优的理解,并分析若干个实际调优案例; 升级ZGC效果:展示在生产环境应用ZGC取得的效果。

GC之痛

很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰。GC停顿指垃圾回收期间STW(Stop The World),当STW时,所有应用线程停止活动,等待GC停顿结束。以美团风控服务为例,部分上游业务要求风控服务65ms内返回结果,并且可用性要达到99.99%。但因为GC停顿,我们未能达到上述可用性目标。当时使用的是CMS垃圾回收器,单次Young GC 40ms,一分钟10次,接口平均响应时间30ms。通过计算可知,有(40ms + 30ms) * 10次 / 60000ms = 1.12%的请求的响应时间会增加0 ~ 40ms不等,其中30ms * 10次 / 60000ms = 0.5%的请求响应时间会增加40ms。可见,GC停顿对响应时间的影响较大。为了降低GC停顿对系统可用性的影响,我们从降低单次GC时间和降低GC频率两个角度出发进行了调优,还测试过G1垃圾回收器,但这三项措施均未能降低GC对服务可用性的影响。

CMS与G1停顿时间瓶颈

在介绍ZGC之前,首先回顾一下CMS和G1的GC过程以及停顿时间的瓶颈。CMS新生代的Young GC、G1和ZGC都基于标记-复制算法,但算法具体实现的不同就导致了巨大的性能差异。

标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中。标记-复制算法可以分为三个阶段:

标记阶段,即从GC Roots集合开始,标记活跃对象; 转移阶段,即把活跃对象复制到新的内存地址上; 重定位阶段,因为转移导致对象的地址发生了变化,在重定位阶段,所有指向对象旧地址的指针都要调整到对象新的地址上。 下面以G1为例,通过G1中标记-复制算法过程(G1的Young GC和Mixed GC均采用该算法),分析G1停顿耗时的主要瓶颈。G1垃圾回收周期如下图所示: file

更多的可以在我的仓库里瞅瞅 https://github.com/Swayingleaves/JavaDeveloperBrain/tree/master

本文由博客一文多发平台 OpenWrite 发布!

标签:Java,G1,工程师,停顿,必备,回收,GC,ZGC,CMS
From: https://blog.51cto.com/u_13236831/8132765

相关文章

  • 六、Java常用类:Object,Scanner
    一、Object类Object:ClassObject是类Object结构的根。每个Class都有Object作为超类。所有对象(包括数组)都实现了这个类的方法。成员方法:publicinthashCode()用来生成对象的唯一哈希码(hashcode),它是用来快速比较两个对象是否相等的publicfinalClassgetClass()......
  • javaweb--resultMap
    resultMap可以灵活的实现数据库列名和java类中的属性名的映射 1、定义<resultMap>标签2、在<select>标签中,使用resultMap属性替换resultType属性 ......
  • 五、Java面向对象:多态
    一、多态介绍概述:顾名思义就是事物在某种时刻的多种状态前提;1、要有继承关系2、要有方法的重写3、要有父类的引用指向子类对象 访问成员的特点:访问成员变量:编译看左,运行看左访问成员方法:编译看左,运行看右访......
  • 基于SAML2.0的SSO实现(C#&Java)
    背景如题原理和对接其他平台一样,在开始之前我们要向调用的服务方申请一些东西,以便后面开展工作,比如,下图就是微信公众平台开发时候需要进行的操作:我们的开发也是一样,也需要这样的前期准备。这个过程可能是通过线上填写信息,也可能发个邮件加个附件,也可以是线下找对应的人员沟......
  • es java 分组查询
    publicLonggetEventGroupDivceCont(LogRequestreq){StringindexName;if(req.getAppId()==null){indexName=indexNameGenerator.structuredLogPrefixWithoutAppId()+"*";}else{indexName......
  • java new(创建)对象时结尾带上{}和不带的区别
    定义一个对象publicclassPerson{publicvoidsay(){System.out.println("hello");}}熟悉(正常)的创建对象方式Personp1=newPerson();不熟悉的创建方式Personp2=newPerson(){};那二者有什么区别?我们可以先打印出类的信息看看public......
  • java八大特性
    简单性面向对象跨平台/可移植性分布式多线程健壮性安全性高性能 ......
  • 懒人必备!编辑器内写完代码一键调试、一键生成接口文档
    国产API调试工具Apipost推出IDEA插件,写完代码就可以调试接口并一键生成接口文档!而且还可以根据已有的方法帮助您快速生成url和params。ApipostHelper=API调试工具+API管理工具+API搜索工具。在商店中搜索或直接点击下方链接即可下载:https://plugins.jetbrains.com/p......
  • 【javascript】关于匿名函数
    什么是匿名函数?没有名字的函数,叫匿名函数,匿名函数主要有以下几种常用的场景:回调函数,直接执行函数,箭头函数什么是回调函数?回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。(作为参数传递到另外一个函数中,这个作为参数......
  • JavaScript模态框无法弹出的问题
    可能是复制的时候class内缺少了 bs-example-modal-lg导致的 修改代码如下:<divclass="modalfadebs-example-modal-lg"tabindex="-1"role="dialog"aria-labelledby="myLargeModalLabel"><divclass="modal-dialogmodal-lg&q......