- 如果新生代在自动适配的时候比较小,导致对象很快进入老年代,FullGC会变长;可以设置NewSize大小,直接设置了最小的新生代大小,避免这种情况
- 如果gc时间长的时候,可以增加并行任务核数,来提高并行速度;还可以增加并发的数量,但是不能太大,以免影响正常的线程运行(Gc线程和业务线程是并发运行的)
- GC收集器的选择,如果追求吞吐量则选择CMS或者ParallelGc, 设置GCTimeRatio来提高吞吐量; 如果是追求响应时间,则选择G1 或者 ZGC 设置MaxGcPauseTime
- G1垃圾收集器,可以指定mix周期启动时间 如果G1更早的启动垃圾收集,也能赢得比赛。G1周期通常在堆的占用达到某个比率(通过参数:XX:InitiatingHeapOccupancyPercent=45设定),跟CMS不太一样,这个参数值依据的是整个堆的使用情况而不是老年代的。
-
CMS和G1的2种不同实现方式:
在CMS采用的是增量更新(Incremental update),只要在写屏障(write barrier)里发现要有一个白对象的引用被赋值到一个黑对象 的字段里,那就把这个白对象变成灰色的。即插入的时候记录下来。
在G1中,使用的是STAB(snapshot-at-the-beginning)的方式,删除的时候记录所有的对象,它有3个步骤:
1,在开始标记的时候生成一个快照图标记存活对象
2,在并发标记的时候所有被改变的对象入队(在write barrier里把所有旧的引用所指向的对象都变成非白的)
3,可能存在游离的垃圾,将在下次被收集
-
-XX:G1MixedGCLiveThresholdPercent=65
为混合垃圾回收周期中要包括的旧区域设置占用率阈值。默认占用率为 65%。这是一个实验性的标志。有关示例,请参见“如何解锁实验性虚拟机标志”。此设置取代了
-XX:G1OldCSetRegionLiveThresholdPercent
设置。Java HotSpot VM build 23 中没有此设置。-XX:G1MixedGCCountTarget=8
设置标记周期完成后,对存活数据上限为
G1MixedGCLIveThresholdPercent
的旧区域执行混合垃圾回收的目标次数。默认值是 8 次混合垃圾回收。混合回收的目标是要控制在此目标次数以内。Java HotSpot VM build 23 中没有此设置。-XX:G1OldCSetRegionThresholdPercent=10
设置混合垃圾回收期间要回收的最大旧区域数。默认值是 Java 堆的 10%。Java HotSpot VM build 23 中没有此设置。
-XX:G1ReservePercent=10
设置作为空闲空间的预留内存百分比,以降低目标空间溢出的风险。默认值是 10%。增加或减少百分比时,请确保对总的 Java 堆调整相同的量。
jvm调优的一些见解
猜你喜欢
转载自blog.csdn.net/ma_ru_long/article/details/106906647
今日推荐
周排行