JVM—G1笔记

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
    评论
JVM (Java Virtual Machine) G1 (Garbage-First) 垃圾收集器是一种用于 Java 应用程序的垃圾收集算法。它是自JDK 7u4版本后引入的一种全新的垃圾收集器。 G1垃圾收集器的设计目标是为了解决传统的分代垃圾收集器可能遇到的一些问题,如停顿时间长、内存碎片化等。它采用了一种基于区域的垃圾收集方式,可以将内存划分为多个大小相等的区域,每个区域可以是Eden、Survivor或Old区。 G1垃圾收集器的工作原理如下: 1. 初始标记(Initial Mark):标记所有从根对象直接可达的对象。 2. 并发标记(Concurrent Mark):在并发执行程序的同时,标记那些在初始标记阶段无法访问到的对象。 3. 最终标记(Final Mark):为并发标记阶段中发生改变的对象进行最终标记。 4. 筛选回收(Live Data Counting and Evacuation):根据各个区域的回收价值来优先回收价值低的区域。 G1垃圾收集器具有以下特点: - 并发执行:在执行垃圾收集过程时,尽可能减少应用程序的停顿时间。 - 分区回收:将整个堆划分为多个区域,可以根据需要优先回收垃圾较多的区域,从而避免全堆回收带来的长时间停顿。 - 内存整理:G1垃圾收集器会对内存进行整理,减少内存碎片化,提高内存利用率。 需要注意的是,G1垃圾收集器并不适用于所有情况。在特定的场景下,如大堆情况下的长时间运行、对延迟要求非常高的应用等,可能需要考虑其他垃圾收集器的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值