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性能调优,开发人员只需要简单的三步(上面参数里面的前三个)即可完成调优:
- 第一步:开启G1垃圾收集器
- 第二步:设置堆的最大内存
- 第三步:设置最大的停顿时间
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参数设置与调优以及应用场景/