JVM系列【6】GC与调优4

JVM系列笔记目录

  • 虚拟机的基础概念
  • class文件结构
  • class文件加载过程
  • jvm内存模型
  • JVM常用指令
  • GC与调优
主要内容

上一篇 JVM系列【6】GC与调优3 记录JVM调优的概念和分析案例。这篇主要讲G1垃圾回收器、三色标记算法。

G1垃圾回收器
  1. 概念

G1(Garbage First)是服务端使用的垃圾回收器,用于多核、大内存的机器上,在大多数情况下可以实现指定的GC停顿时间,同时还保持较高的吞吐量。不同于之前的分代垃圾回收器,G1是逻辑上分代,物理上不分代。内存分为一个一个Region,有Eden区、Survivor区、Old区、还有Humongous区。

file

特点:并发回收;压缩空闲时间不会延长GC的暂停时间;更易预测的GC暂停时间;适用不需要很高的吞吐量的场景。

优点:追求吐吞量;追求响应时间:可以对STW进行控制;灵活: 分Region回收,优先回收花费时间少、垃圾比例高的Region。

  1. CSet和RSet

    CSet(Collection Set): G1一组可被回收的分区的集合;在CSet中存活的数据会在GC过程中被移动到另一个可用分区;CSet中的分区可以来自Eden空间、survivor空间或者老年代;CSet中的分区可以来自Eden空间、survivor空间或者老年代。

    RSet(RememberedSet):记录了其它Region中的对象到本region的引用;价值在于使得垃圾回收器不需要扫描整个堆就能找到谁引用了当前分区中的对象,只需要扫描RSet即可

file

了解:RSet与赋值的效率,由于RSet的存在,那么每次给对象赋值引用的时候,就得做一些额外的操作,指的是在RSet中做一下额外的记录(在GC中称为写屏障),这个写屏障不等于内存屏障。

  1. 新老年代的比例

    G1中新老年代的比例为5%-60%,一般不用手工指定,也不要手动指定,因为这是G1预测停顿时间的基准,G1去控制和预测STW就是通过动态调整这个比例来实现的。

  2. Region有多大?

    G1中Region不指定的时候,会根据实际的Heap大小来设定,取值范围为1 2 4 8 16 32M,设置参数为-XX:G1HeapRegionSize

  3. G1中的垃圾回收

    分YGC、FGC、Mixed GC类型。

    YGC: Eden空间不足触发,多线程并发执行。

    FGC:Old空间不足触发

    Mixed GC: 相当于CMS的回收过程,初始标记、并发标记、最终标记、筛选回收。触发Mixed GC的参数是-XX:InitiatingHeapOccupacyPercent, 默认为45%,当O区超过这个值启动MixedGC。

  4. G1是并行回收是否存在FGC?

    当分配对象非常快,回收不过来的情况下会产生FGC,jdk10以前是串行FullGC,之后是并行的FGC;

    如何避免FGC?

    降低MixedGC的触发一直,让MixedGC提早发生(默认是45%);扩内存;提高CPU性能(回收得快,业务逻辑产生对象的速度固定,垃圾回收越快,内存空间越大)。

三色标记法
  1. 三色的含义:

    白色指的是未被标记的对象,灰色指自身被标记,成员变量未被标记的对象,黑色指自身和成员变量都已标记完成的对象。

file

  1. 漏标

    CMS和G1在垃圾标记的过程中存在一个难点:在标记对象的过程中,对象的引用关系正在发生变化,会产生漏标的现象。漏标产生的充分必要条件:在remark过程中,黑色指向了白色,如果不对黑色重新扫描,则会漏标,会把白色D对象当做没有新引用指向从而回收掉;并发标记过程中,删除了所有从灰色到白色的引用,则会产生漏标,此时白色对象应该被回收,D漏标。

file

  1. 如何解决漏标

    CMS用的是Incremental Update算法, 增量更新,关注引用的增加,A->D,把黑色重新标记为灰色,下次重新扫描A的属性。

    G1用的是SATB(snapshot at the beginning),关注引用的删除,当B->D引用消失时,要把这个“引用”推到GC的堆栈,保证D还能被GC扫描到。

    为什么G1使用STAB? 当B->D引用消失时,会把这个引用推到GC的堆栈,下次扫描时候会拿到这个引用,由于有RSet的存在,不需要扫描整个堆去查找白色的引用,效率比较高。

  2. 总结

    CMS使用的并发标记算法是三色标记+Incremental Update

    CMS使用的并发标记算法是三色标记+SATB

    知识分享,转载请注明出处。学无先后,达者为先!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值