jvm虚拟机学习(三)

前言

承接上文,继续总结

一、G1回收器

G1垃圾回收器

  1. G1垃圾收集器将整个JVM内存分为多个大小相等的region,年轻代和老年代逻辑分区
  2. G1是java9以后的默认垃圾回收器
  3. G1在整体上使用标记整理算法,局部使用复制算法
  4. G1的每个region大小在1-32M之间,可以通过-XX: G1HeapRegionSize=n指定区大小
  5. 总的Region个数最大可以存2048个,即heap最大能够达到32M*2048=64G
  6. 0.5<obj<1,那么放到old区,old标记为H
    1<obj<n,连续的n个regin作为H

概念

  • rset
    每个region都有一个叫rset的小区,它代表了其他region引用了当前region对象的记录

  • cset
    本次GC需要清理的Region集合

mixGC过程

  1. 初始标记(标记出GC root对象,以及GCroot所在的Region(RootRegion)
  2. Root Region Scanning(扫描整个old的Region)
  3. 并发标记(并发追溯标记,进行GCRootTracing的过程)
  4. 最终标记(修正并发标记期间,因程序运行导致标记发生变化的那一部分对象)
  5. 清理回收: 根据时间来进行价值最大化的回收,重置rset

G1相关参数配置

-XX:+UserG1GC:使用G1垃圾回收器
-XX:MaxGCPauseMillis=n:最大GC停顿时间,毫秒值
-XX:InitatingHeapOccapancyPercent=n:当堆空间占用到n兆时触发GC
-XX:ConcGCThreads=n:并发GC使用的线程数
-XX:G1ReserverPercent=n 设置作为空闲空间的预留内存百分比(10%)

二、 ZGC回收器

ZGC
颜色指针
Object o = new Object(),其中o引用的信息存储如上图,中间Finalizable到Marked0标记颜色指针
读屏障
new Object()存在一个个region中,o指向其地址时,如果发生GC,导致new Object()地址发生变化,需要o正确指向。 在读取o引用时,加上一个读屏障,当为bad color时,等o地址正确时,在指向正确读取

GC流程
在这里插入图片描述

  1. 并发标记(如果是活跃对象,o引用中标记为mark0或mark1,如果不是活跃对象,则标记为remapped)
  2. 并发预备重分配(扫描所有region区,标记出relocate set区域)
  3. 并发重分配(将其中活得对象通过转移移动到一个专门维护转移的表(forward table),释放旧的引用关系,同时进行自愈)
  4. 并发重映射(修正o的新老地址引用)

三、调优

常用工具

  • jps
    主要查看虚拟机的相关参数配置

  • jstat
    类加载,内存,垃圾收集,jit编译信息

  • jinfo
    实时调整和查看虚拟机参数

  • jmap
    侧重查看内存信息

  • jhat
    分析java堆信息,以html的形式显示出来,支持对象查询语言

  • jstack
    线程堆栈信息

  • Arthas

目的

  1. 减小响应时间
  2. 提高吞吐量

常用参数
-XX:+UseXXXGC
-Xms和-Xmx
-XX:NewRatio
-XX:SurviorRatio
-XX:+UserAdaptiveSizePolicy
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath
-XX:MaxTenuringThreshold
-Xloggc:/xxx/logs/xxx-gc-%t.log
-XX:+UserGCLogFileRotation
-XX:NumberOfGCLogFiles = 5
-XX:GCLogFileSize=20M
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps

步骤

  1. 熟悉业务场景
  2. 选择合理的垃圾收集器
  3. 计算内存需求
  4. 设定年轻代老年代大小
  5. 设置日志参数
  6. 压力测试
  7. 分析日志
  8. 调整参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值