调优JVM参数
调优JVM参数主要关注停顿时间和吞吐量,两者不可兼得,提高吞吐量会拉长停顿时间。
JVM常用调优参数汇总
//调整内存大小
-XX:MetaspaceSize=128m(元空间默认大小)
-XX:MaxMetaspaceSize=128m(元空间最大大小)
-Xms1024m(堆最大大小)
-Xmx1024m(堆默认大小)
-Xmn256m(新生代大小)
-Xss256k(栈最大深度大小)
//调整内存比例
//伊甸园:幸存区
-XX:SurvivorRatio=8(伊甸园:幸存区=8:2)
//新生代和老年代的占比
-XX:NewRatio=4 //表示新生代:老年代 = 1:4 即老年代占整个堆的4/5;默认值=2
//修改垃圾回收器
//设置Serial垃圾收集器(新生代)
//-XX:+UseSerialGC
//设置PS+PO,新生代使用功能Parallel Scavenge 老年代将会使用Parallel Old收集器
//-XX:+UseParallelOldGC
//CMS垃圾收集器(老年代)
//-XX:+UseConcMarkSweepGC
//设置G1垃圾收集器
-XX:+UseG1GC
//GC停顿时间,垃圾收集器会尝试用各种手段达到这个时间
-XX:MaxGCPauseMillis
//进入老年代最小的GC年龄,年轻代对象转换为老年代对象最小年龄值,JDK8默认值15,JDK9默认值7
-XX:InitialTenuringThreshold=7
//新生代可容纳的最大对象,大于则直接会分配到老年代,0代表没有限制。
-XX:PretenureSizeThreshold=1000000
//使用多少比例的老年代后开始CMS收集,默认是68%,如果频繁发生SerialOld卡顿,应该调小
-XX:CMSInitiatingOccupancyFraction
//G1混合垃圾回收周期中要包括的旧区域设置占用率阈值。默认占用率为 65%
-XX:G1MixedGCLiveThresholdPercent=65
//Heap Dump(堆转储)文件
//当发生OutOfMemoryError错误时,自动生成堆转储文件。
-XX:+HeapDumpOnOutOfMemoryError
//错误输出地址
-XX:HeapDumpPath=/Users/a123/IdeaProjects/java-test/logs/dump.hprof
//GC日志
-XX:+PrintGCDetails(打印详细GC日志)
-XX:+PrintGCTimeStamps:打印GC时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps:打印GC时间戳(以日期格式)
-Xlog:gc:(打印gc日志地址)
JVM生产优化通常涉及调整JVM的参数来优化性能。以下是一些常见的JVM优化参数及其用途的例子:
-
-Xms
和-Xmx
:设置JVM的初始和最大堆内存大小。ava -Xms512m -Xmx1024m YourApplication
-
-XX:NewSize
和-XX:MaxNewSize
:设置新生代的初始和最大大小。ava -XX:NewSize=256m -XX:MaxNewSize=512m YourApplication
-
-XX:PermSize
和-XX:MaxPermSize
:设置永久代(PermGen)的初始和最大大小。ava -XX:PermSize=128m -XX:MaxPermSize=256m YourApplication
-
-XX:+UseParallelGC
或-XX:+UseG1GC
:选择不同的垃圾收集器。ava -XX:+UseParallelGC YourApplication
-
-XX:MaxGCPauseMillis
:设置垃圾收集的最大暂停时间。ava -XX:MaxGCPauseMillis=200 YourApplication
-
-XX:+PrintGCDetails
和-XX:+PrintGCTimeStamps
:打印GC详细信息和时间戳以便分析。ava -XX:+PrintGCDetails -XX:+PrintGCTimeStamps YourApplication
-
-XX:+HeapDumpOnOutOfMemoryError
:当内存溢出时生成堆转储。ava -XX:+HeapDumpOnOutOfMemoryError YourApplication
-
-XX:MetaspaceSize
和-XX:MaxMetaspaceSize
:设置元空间的初始和最大大小(JDK 8及以后)。ava -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m YourApplication
根据应用程序的需求和运行环境,可以组合使用这些参数来优化JVM的性能。在实际操作中,可能需要结合JVM监控和分析工具(如VisualVM, JProfiler, or YourKit)进行调整。