1、网上通常说修改这两处地方
我的情况无效
2、找了很久发现,我的项目是gradle项目
所以在这个路劲下面新建gradle.properties文件,内容如下:
##下面都是以BUILD 一个大项目的情况来进行比较
##org.gradle.jvmargs=-XX:+UseParallelGC -Xms10g -Xmx10g -XX:MaxMetaspaceSize=1g ,YANG GC 平均次数7,平均总时间0.325秒;FULL GC 平均次数3,平均总时间0.231秒;平均总时间0.557秒
##org.gradle.jvmargs=-XX:+UseConcMarkSweepGC -Xms10g -Xmx10g -XX:MaxMetaspaceSize=1g ,YANG GC 平均次数25,平均总时间1.274秒;FULL GC 平均次数2,平均总时间0.047秒;平均总时间1.322秒
##org.gradle.jvmargs=-XX:+UseG1GC -Xms10g -Xmx10g -XX:MaxMetaspaceSize=1g ,YANG GC 平均次数17,平均总时间0.764秒;FULL GC 平均次数0,平均总时间0秒;平均总时间0.764秒
org.gradle.jvmargs=-XX:+UseParallelGC -Xms10g -Xmx10g -XX:MaxMetaspaceSize=1g
垃圾收集器的比较请查看:https://www.javazhiyin.com/34407.html
没有最好的垃圾回收器,只有更适合业务的垃圾回收器。
如果对GC的停顿时间很敏感,那么请使用G1,比如WEB服务器;
如果对吞吐量有很大的要求,建议使用ParallelGC,比如OptaPlanner这种测试用例。
关于JVM -XX:NewRatio , -Xmn,-XX:MetaspaceSize 的思考:
在默认情况下,看到Eden Space占比高,Old Space占比很低
所以就直接粗暴的调高年轻代的比例,-Xms10g -Xmx10g -Xmn8g 这样设置
发现GC频率是下降了,但是GC的时候花费的总时间上升了。
因为YANG GC的同时,很多时候会发生FULL GC,因为Eden的空间大了,YANG GC的时候还剩下的对象放到Old Space 放不下了。
所以改为如下配置:-Xms10g -Xmx10g -XX:NewRatio=4
这样修改后,GC花费时间就降下了,虽然GC频率会有所提高,但那是YANG GC,是可以接受的。
另外一个情况是
再上面的设置后,在Old Space 明显很小的时候,还是会FULL GC
发现需要设置元空间的初始大小:-XX:MetaspaceSize=1g -XX:MaxMetaspaceSize=1g
这样设置后,FULL GC 次数明显下降