JVM–调优–3.1–参数–重要参数设置
1、设置最小堆和最大堆一样
原因
空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC后调整堆的大小。
操作(本机以idea作为操作)
-Xms1024m
-Xmx1024m
2、设置收集器为g1收集器
-XX:+UseG1GC
2.1、好处
-
并行性
- 回收期间,可以由多个GC线程同时工作,有效的利用多核的计算能力
-
并发性
- G1拥有与应用程序交替执行的能力,部分工作可以与应用程序同时执行,不会在整个回收期间完全阻塞应用程序。
-
分代GC
- G1兼顾了年轻代和老年代,相比较于其他的垃圾回收器,其他的收集器只能工作于年轻代或者老年代其中的一个,所以在这个方面和之前的收集器有所不同。
-
空间整理
- 在回收过程中会进行适当的对象移动,与CMS不同,只是简单的标记清理对象,在若干次GC之后,CMS必须执行一次碎片整理,G1则是每次回收都会有效的复制对象,尽量减少空间碎片。
-
可预见性
- 由于分区的原因,G1可以只选取部分区域进行内存回收,可以缩小回收范围,对于全局停顿有很好的掌控性。
2.2、概括
- JDK1.7中使用。
- 目标是为了取代CMS回收器。
- 也分为年轻代和老年代,任然是有eden区和survivor区。
- 不要求整个的eden区、年轻代或者老年代是连续的空间,使用的是一个分区算法。
2.3、案例
3、设置吞吐量大小/最大垃圾收集停顿时间
-XX:MaxGCPauseMillis=n
3.1、说明
- 设置最大垃圾收集停顿时间,如果无法满足此时间,JVM会自动调整年轻代大小(堆内存年轻代比例,eden from to 比例),以满足此在n值之内。
- 参考值:2000,具体的看业务,谨慎使用,不然服务器会崩溃
3.2、案例
4、堆占用了多少比例的时候触发GC
-XX:InitiatingHeapOccupancyPercent=n
4.1、说明
- 默认:n=45,对于这个值就触发GC
- n=当前可以使用的堆内存*100/整个Java堆
- 可以使用的堆内存占用了多少比例的时候触发GC。默认占用率是整个Java堆的45%
4.2、案例
5、设置新生代与老生代的大小比例
-XX:NewRatio=n
5.1、说明
- 设置新生代与老生代的大小比例
- 默认:2
5.2、案例
6、设置eden/survivor空间大小的比例
-XX:SurvivorRatio=n
6.1、说明
- 默认:8
6.2、案例
7、设置分代年龄
-XX:MaxTenuringThreshold=n
7.1、说明
- 默认: 15
7.2、案例
8、设置垃圾收集器在并行阶段使用的线程数
-XX:ParallelGCThreads=n
8.1、说明
- 默认值:随JVM运行的平台不同而不同
8.2、案例
9、并发垃圾收集器使用的线程数量
-XX:ConcGCThreads=n
9.1、说明
- 默认值:随JVM运行的平台不同而不同
9.2、案例
10、设置堆内存保留为假天花板的总量,以降低提升失败的可能性
-XX:G1ReservePercent=n
10.1、说明
- 默认值:10
10.2、案例
11、指定每个region区的大小
-XX:G1HeapRegionSize=n
11.1、说明
- 使用G1时Java堆会被分为大小统一的的区(region) ,该参数可以指定每个region区的大小
- 默认值:根据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb.