JVM—G1笔记

本文介绍了JVM调优的两个关键指标——吞吐量和停顿时间,强调了它们之间的权衡。详细讲解了G1垃圾收集器的使用,包括启动参数设置、工作过程,如MinorGC、MixedGC和FullGC的触发条件及特点。同时,阐述了G1适用于大内存场景的原因,以控制停顿时间为目标。最后,讨论了G1在实际应用中的场景选择。
摘要由CSDN通过智能技术生成

1.JVM调优的两个指标:吞吐量,停顿时间

停顿时间:简单理解为STW的时间,此时用户代码不会执行。

吞吐量:运行用户代码时间/(运行用户代码时间 + 运行垃圾收集器的时间)

这两者是矛盾的,选择了停顿时间意味着要牺牲了吞吐量,选择了吞吐量意味着要牺牲停顿时间。根据具体的业务场景,选择优先停顿时间还是优先吞吐量。

2.G1的参数设置:

-XX:+UseG1GC 开启G1

-Xms2G -Xmx2G 设置堆的大小,G1一半不需要手动设置eden和survivor的大小,G1自己动态调整

-Xss256K 可以设置虚拟机栈的大小

-XX:MaxGCPaustMillis=300 最大停顿时间,默认值是200

3.G1回收过程:

G1回收经历了Minor GC ——> Mixed GC——>Full GC

1) Minor GC:

触发条件:新生代(即Eden + Survivor)占据整个堆大小的60%时,触发Minor GC

晋升条件:对象age超过阈值15,Eden存活对象 + from对象的大小超过50%时,age最大的对象进入老年代

2) Mixed GC:

触发条件:老年代超过堆的45%

回收经历了初始标记——>并发标记——>最终标记——>筛选回收几个过程。初始标记只会标记GCRoot和第一层对象,耗时较短, 耗时最长的并发标记使用多线程进行,目的还是减少STW的时间。最终标记就来修正初始标记后新产生的垃圾。

3) Full GC:

使用标记整理算法,在设置的停顿时间内,选择小于10%的垃圾最多的区域进行回收,回收后检查老年代大小是否小于45%,如果还超过就重复操作,8次后还不满足老年代小于45%,就会执行Full GC。

4.G1的适用场景:

适用内存大时,内存大时如果发生FullGC,会回收整个老年代,由于老年代空间较大,回收耗时很长,无法接口。而G1可以只回收部分垃圾最多的空间,所以可以很好的控制停顿时间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值