JVM-058-垃圾回收器-G1回收器-JVM参数设置与调优以及应用场景

相关JVM参数设置

这里列举主要常见的6个参数,其他参数可以参考官方文档:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

  • -XX:+UseG1GC:手动指定使用G1垃圾收集器执行内存回收任务

  • -XX:G1HeapRegionSize:设置每个Region的大小。值为2的N次幂,范围是1MB到32MB之间,即1MB,2MB,4MB,8MB,16MB,32MB。目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000。

    比如设置为1,则堆内存为 1* 2048 = 2G;设置为32,则堆内存为 32 * 2048 = 64G

  • -XX:MaxGCPauseMillis:设置期望达到的最大GC停顿时间指标,JVM会尽力实现,但不保证达到。默认值是200ms

  • -XX:+ParallelGCThread:设置STW工作线程数的值。最多设置为8

  • -XX:ConcGCThreads:设置并发标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右。

  • -XX:InitiatingHeapOccupancyPercent:设置触发并发GC周期的Java堆占用率阈值。超过此值,就触发GC。默认值是45。

简化JVM性能调优

G1的设计原则就是简化JVM性能调优,开发人员只需要简单的三步(上面参数里面的前三个)即可完成调优:

  1. 第一步:开启G1垃圾收集器
  2. 第二步:设置堆的最大内存
  3. 第三步:设置最大的停顿时间

G1中提供了三种垃圾回收模式:YoungGC、Mixed GC和Full GC,在不同的条件下被触发。

适用场景

  • 面向服务端应用,针对具有大内存、多处理器的机器。(在普通大小的堆里表现并不惊喜)

  • 最主要的应用是需要低GC延迟,并具有大堆的应用程序提供解决方案;

    • 如:在堆大小约6GB或更大时,可预测的暂停时间可以低于0.5秒;(G1通过每次只清理一部分而不是全部的Region的增量式清理来保证每次GC停顿时间不会过长)。
  • 用来替换掉JDK1.5中的CMS收集器;

    在下面的情况时,使用G1可能比CMS好:

    • 超过50%的Java堆被活动数据占用;
    • 对象分配频率或年代提升频率变化很大;
    • GC停顿时间过长(长于0.5至1秒)
  • HotSpot垃圾收集器里,除了G1以外,其他的垃圾收集器均使用内置的JVM线程执行GC的多线程操作,而G1 GC可以采用应用线程承担后台运行的GC工作,即当JVM的GC线程处理速度慢时,系统会调用应用程序线程帮助加速垃圾回收过程。

JVM-058-垃圾回收器-G1回收器-JVM参数设置与调优以及应用场景

https://blog.buubiu.com/JVM-058-垃圾回收器-G1回收器-JVM参数设置与调优以及应用场景/

作者

buubiu

发布于

2024-01-17

更新于

2024-01-25

许可协议