常见的JVM调优参数和应用场景
概要
JVM调优可以显著提升Java应用程序的性能。以下是一些常用的JVM参数和应用场景的介绍。
一、堆内存设置
-Xms<size> 和 -Xmx<size>:设置初始堆大小和最大堆大小。
1. -Xms<size>
初始化时的堆大小。设置得大一些可以避免频繁动态扩展堆。
2. -Xmx<size>
设置堆内存的最大值。设置的太小可能导致 OutOfMemoryError,设置的太大可能导致 GC 时间过长。
示例:-Xms512m -Xmx4g
这表示堆的初始大小为 512 MB,最大可以扩展到 4 GB。
二、新生代和老年代设置
1. -Xmn<size>
设置新生代大小。通常建议新生代占总堆的1/3,这样可以提高新生代GC的效率。
示例:-Xmn1g,表示年轻代大小为1 GB。
2. -XX:NewRatio=<ratio>
设置新生代和老年代的比例。这个比例决定了JVM在堆内存中为年轻代和老年代分配的内存大小。
示例:
-XX:NewRatio=2:表示年轻代与老年代的比例为1:2(新生代占总堆内存的1/3)。
-XX:NewRatio=4:表示年轻代与老年代的比例为1:4(新生代占总堆内存的1/5),适合对象存活时间较长的场景。
三、垃圾回收相关参数
1. -XX:+UseParallelGC
用于选择适合应用场景的垃圾回收器。
使用 Parallel GC(并行垃圾收集器),这是 JDK 1.8 的默认垃圾收集器,适合高吞吐量应用。
使用其他垃圾收集器,示例:
-XX:+UseSerialGC:使用串行垃圾回收器。
-XX:+UseG1GC:使用G1垃圾回收器。
2. -XX:MaxGCPauseMillis=<time>
设置GC最大暂停时间。帮助控制应用的响应时间。
示例:-XX:MaxGCPauseMillis=200,表示最大GC暂停时间为200毫秒。
3. -XX:GCTimeRatio=<ratio>
设置垃圾回收占总运行时间的比例。默认值是99,表示允许1%的时间用于GC,适合希望优化吞吐量的场景。
示例:-XX:GCTimeRatio=19,允许19%的时间用于GC。
4. -XX:MaxTenuringThreshold=<value>
设置对象从新生代晋升到老年代的年龄阈值。适合调节对象的存活时间,影响GC频率和性能。
示例:-XX:MaxTenuringThreshold=15,表示对象在新生代存活15次后才会晋升到老年代。
五、线程栈大小
-Xss<size>
设置每个线程的栈大小。栈用于存储方法的局部变量、操作数栈、动态链接和返回地址。较大的栈大小可以支持更深的递归,但会消耗更多的内存。
六、类加载设置
-XX:PermSize=<size>:设置永久代的初始大小(对于较旧的JVM)
-XX:MaxPermSize=<size>:设置永久代的最大大小。
7.调试和监控参数
-XX:+PrintGCDetails:打印详细的GC信息。
-XX:+PrintGCTimeStamps:在GC日志中添加时间戳。
-XX:+HeapDumpOnOutOfMemoryError:在发生内存溢出时生成堆转储文件。