JVM调优有什么经验吗?

要明⽩⼀点,所有的调优的⽬的都是为了⽤更⼩的硬件成本达到更⾼的吞吐,JVM的调优也是⼀样,通过对垃圾收集器和内存分配的调优达到性能的最佳。

简单的参数含义

⾸先,需要知道⼏个主要的参数含义。

eden

1. -Xms设置初始堆的⼤⼩,-Xmx设置最⼤堆的⼤⼩

2. -XX:NewSize年轻代⼤⼩,-XX:MaxNewSize年轻代最⼤值,-Xmn则是相当于同时配置XX:NewSize和-XX:MaxNewSize为⼀样的值

3. -XX:NewRatio设置年轻代和年⽼代的⽐值,如果为3,表示年轻代与⽼年代⽐值为1:3,默认值为2

4. -XX:SurvivorRatio年轻代和两个Survivor的⽐值,默认8,代表⽐值为8:1:1

5. -XX:PretenureSizeThreshold 当创建的对象超过指定⼤⼩时,直接把对象分配在⽼年代。

6. -XX:MaxTenuringThreshold设定对象在Survivor复制的最⼤年龄阈值,超过阈值转移到⽼年代

7. -XX:MaxDirectMemorySize当Direct ByteBuffer分配的堆外内存到达指定⼤⼩后,即触发Full GC

调优

1. 为了打印⽇志⽅便排查问题最好开启GC⽇志,开启GC⽇志对性能影响微乎其微,但是能帮助我们快速排查定位问题。-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gc.log

2. ⼀般设置-Xms=-Xmx,这样可以获得固定⼤⼩的堆内存,减少GC的次数和耗时,可以使得堆相对稳定

3. -XX:+HeapDumpOnOutOfMemoryError让JVM在发⽣内存溢出的时候⾃动⽣成内存快照,⽅便排查问题

4. -Xmn设置新⽣代的⼤⼩,太⼩会增加YGC,太⼤会减⼩⽼年代⼤⼩,⼀般设置为整个堆的1/4到1/3

5. 设置-XX:+DisableExplicitGC禁⽌系统System.gc(),防⽌⼿动误触发FGC造成问题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容