常用JVM配置参数
文章目录
Trace跟踪参数
-XX:+printGC
- 可以打印GC的简要信息
[GC 4790K->374K(15872K), 0.0001606 secs]
[GC 4790K->374K(15872K), 0.0001474 secs]
[GC 4790K->374K(15872K), 0.0001563 secs]
[GC 4790K->374K(15872K), 0.0001682 secs]
-XX:+PrintGCTimeStamps
- 打印CG发生的时间戳
例
[GC[DefNew: 4416K->0K(4928K), 0.0001897 secs] 4790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
-XX:+PrintGCDetails
- 打印GC详细信息

-Xloggc:log/gc.log
- 指定GC log的位置,以文件输出
- 帮助开发人员分析问题
-XX:+PrintHeapAtGC
-XX:+TraceClassLoading
XX:+PrintClassHistogram
- 按下Ctrl+Break后,打印类的信息
- 分别显示:序号、实例数量、总大小、类型
-Xmx –Xms
堆的分配参数
-Xmn
-XX:NewRatio
- 新生代(eden+2*s)和老年代(不包含永久区)的比值
- 4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:SurvivorRatio
- 设置两个Survivor区和eden的比
- 8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
-XX:+HeapDumpOnOutOfMemoryError
-XX:+HeapDumpPath
- 导出OOM的路径
- -Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:/test.dump
-XX:OnOutOfMemoryError
- 在OOM时,执行一个脚本
- "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“
- 当程序OOM时,在D:/a.txt中将会生成线程的dump
- 可以在OOM时,发送邮件,甚至是重启程序
堆的分配参数-总结
- 根据实际事情调整新生代和幸存代的大小
- 官方推荐新生代占堆的3/8
- 幸存代占新生代的1/10
- 在OOM时,记得Dump出堆,确保可以排查现场问题
永久区分配参数
XX:PermSize -XX:MaxPermSize
- 设置永久区的初始空间和最大空间
- 他们表示,一个系统可以容纳多少个类型
- 使用CGLIB等库的时候,可能会产生大量的类,这些类,有可能撑爆永久区导致OOM
- 打开堆的Dump
- 堆空间实际占用非常少
- 但是永久区溢出 一样抛出OOM
栈的分配参数
-Xss
- 通常只有几百K
- 决定了函数调用的深度
- 每个线程都有独立的栈空间
- 局部变量、参数 分配在栈上