JVM调优原则

JVM调优原则算法

调优目标

  1. 将进入老年代的对象数量降到最低缓存

  2. 减小 Full GC 的执行时间服务器

在一样场景下,采用多个机器上进行参数调整后的比较验证,将验证可以提升性能的参数应用到最终全部服务器上。性能

通常常规

知足下列不须要优化优化

Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次;


spa

基本思想

针对JVM堆的设置

通常能够经过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,一般把最大、最小设置为相同的值;操作系统

年轻代和年老代

根据默认的比例(1:2)分配堆内存, 能够经过调整两者之间的比率NewRadio来调整两者之间的大小。线程

如年轻代,经过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。一样,为了防止年轻代的堆收缩,咱们一般会把-XX:newSize -XX:MaxNewSize设置为一样大小。对象

年轻代和年老代设置多大才参考:生命周期

  1. 更大的年轻代必然致使更小的年老代,大的年轻代会延长普通GC的周期,但会增长每次GC的时间,小的年老代会致使更频繁的Full GC。

  2. 更小的年轻代必然致使更大年老代,小的年轻代会致使普通GC很频繁,但每次的GC时间会更短,大的年老代会减小Full GC的频率。

如何选择应该依赖应用程序对象生命周期的分布状况:若是应用存在大量的临时对象,应该选择更大的年轻代;若是存在相对较多的持久对象,年老代应该适当增大。但不少应用都没有这样明显的特性。

在抉择时应该根据如下两点:

  1. 本着Full GC尽可能少的原则,让年老代尽可能缓存经常使用对象,JVM的默认比例1:2也是这个道理 。

  2. 经过观察应用一段时间,看其余在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际状况加大年轻代,好比能够把比例控制在1:1。但应该给年老代至少预留1/3的增加空间。

配置较好的机器

好比多核、大内存机器,能够为年老代选择并行收集算法:-XX:+UseParallelOldGC 。

线程堆栈的设置

每一个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太了,通常256K就足用。

理论上,在内存不变的状况下,减小每一个线程的堆栈,能够产生更多的线程,但这实际上还受限于操做系统。

若是你以为文章不错,文末的赞 ???? 又回来啦,记得给我「点赞」和「在看」哦~

相关文章
相关标签/搜索