JVM参数
文章目录
- 内存相关参数
- 堆内存设置
- 年轻代设置
- 方法区设置
- 垃圾回收参数
- 选择垃圾回收器
- G1垃圾回收器参数
- GC日志参数
- 内存溢出处理
内存相关参数
堆内存设置
最常用的就是这两个参数:
-Xms2g # 初始堆内存大小
-Xmx4g # 最大堆内存大小
-Xms
设置JVM启动时的初始堆内存大小,-Xmx
设置最大堆内存。建议在生产环境中把这两个值设置成一样,避免JVM在运行过程中动态调整堆大小,减少性能开销。
年轻代设置
-Xmn1g # 直接设置年轻代大小
-XX:NewRatio=3 # 设置老年代与年轻代的比例
-XX:SurvivorRatio=8 # 设置Eden区与Survivor区的比例
年轻代主要存放新创建的对象,如果你的应用创建对象很频繁,可以适当增大年轻代。一般建议年轻代占堆内存的1/3到1/4。
方法区设置
Java 8之前:
-XX:PermSize=256m # 永久代初始大小
-XX:MaxPermSize=512m # 永久代最大大小
Java 8及以后:
-XX:MetaspaceSize=256m # 元空间初始大小
-XX:MaxMetaspaceSize=512m # 元空间最大大小
方法区存放类的信息,如果你的应用加载了很多类,就需要增大这个区域。
垃圾回收参数
选择垃圾回收器
-XX:+UseSerialGC # 使用Serial GC
-XX:+UseParallelGC # 使用Parallel GC
-XX:+UseConcMarkSweepGC # 使用CMS GC
-XX:+UseG1GC # 使用G1 GC
不同的垃圾回收器适用于不同场景:
- Serial GC:适合小型应用
- Parallel GC:适合吞吐量优先的应用
- CMS GC:适合低停顿时间的应用
- G1 GC:适合大内存、低延迟要求的应用
G1垃圾回收器参数
-XX:+UseG1GC # 启用G1
-XX:MaxGCPauseMillis=200 # 设置最大GC暂停时间
-XX:G1HeapRegionSize=16m # 设置G1区域大小
G1是目前比较推荐的垃圾回收器,特别适合大内存的应用。
GC日志参数
-XX:+PrintGC # 打印简单GC信息
-XX:+PrintGCDetails # 打印详细GC信息
-XX:+PrintGCTimeStamps # 打印GC时间戳
-XX:+PrintGCApplicationStoppedTime # 打印应用暂停时间
-Xloggc:/path/to/gc.log # GC日志输出到文件
线上环境建议开启GC日志,方便排查性能问题。
内存溢出处理
配置以下参数可以在发生内存溢出时定位到问题:
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成堆转储文件
-XX:HeapDumpPath=/com/coldscholor/dump/ # 堆转储文件路径