jvm调优的一些见解

  1. 如果新生代在自动适配的时候比较小,导致对象很快进入老年代,FullGC会变长;可以设置NewSize大小,直接设置了最小的新生代大小,避免这种情况
  2. 如果gc时间长的时候,可以增加并行任务核数,来提高并行速度;还可以增加并发的数量,但是不能太大,以免影响正常的线程运行(Gc线程和业务线程是并发运行的)
  3. GC收集器的选择,如果追求吞吐量则选择CMS或者ParallelGc,  设置GCTimeRatio来提高吞吐量;                                          如果是追求响应时间,则选择G1  或者 ZGC   设置MaxGcPauseTime
  4. G1垃圾收集器,可以指定mix周期启动时间  如果G1更早的启动垃圾收集,也能赢得比赛。G1周期通常在堆的占用达到某个比率(通过参数:XX:InitiatingHeapOccupancyPercent=45设定),跟CMS不太一样,这个参数值依据的是整个堆的使用情况而不是老年代的。
  5. CMS和G1的2种不同实现方式:

    在CMS采用的是增量更新(Incremental update),只要在写屏障(write barrier)里发现要有一个白对象的引用被赋值到一个黑对象 的字段里,那就把这个白对象变成灰色的。即插入的时候记录下来。

    在G1中,使用的是STAB(snapshot-at-the-beginning)的方式,删除的时候记录所有的对象,它有3个步骤:

    1,在开始标记的时候生成一个快照图标记存活对象

    2,在并发标记的时候所有被改变的对象入队(在write barrier里把所有旧的引用所指向的对象都变成非白的)

    3,可能存在游离的垃圾,将在下次被收集

  6. -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 堆调整相同的量。

猜你喜欢

转载自blog.csdn.net/ma_ru_long/article/details/106906647