一、Trace 跟踪参数
1、打印GC的简要信息
-verbose:gc
-XX:+PrintGC2
1
-verbose:gc2
-XX:+PrintGC2、打印GC详细信息
-XX:+PrintGCDetails1
1
-XX:+PrintGCDetails3、打印CG发生的时间戳
-XX:+PrintGCTimeStamps1
1
-XX:+PrintGCTimeStamps4、指定GC log的位置,以文件输出
-Xloggc:log/gc.log1
1
-Xloggc:log/gc.log5、每次一次GC后,都打印堆信息
-XX:+PrintHeapAtGC1
1
-XX:+PrintHeapAtGC6、监控类的加载
-XX:+TraceClassLoading1
1
-XX:+TraceClassLoading7、按下Ctrl+Break后,打印类的信息。分别显示:序号、实例数量、总大小、类型

-XX:+PrintClassHistogram1
1
-XX:+PrintClassHistogram二、堆的分配参数
1、指定最大堆和最小堆
-Xmx –Xms1
1
-Xmx –Xms-Xmx20m -Xms5m 运行代码:
System.out.print("Xmx=");
System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M");
System.out.print("free mem=");
System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M");
System.out.print("total mem=");
System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");
10
1
-Xmx20m -Xms5m 运行代码:2
System.out.print("Xmx=");3
System.out.println(Runtime.getRuntime().maxMemory()/1024.0/1024+"M");4
5
System.out.print("free mem=");6
System.out.println(Runtime.getRuntime().freeMemory()/1024.0/1024+"M");7
8
System.out.print("total mem=");9
System.out.println(Runtime.getRuntime().totalMemory()/1024.0/1024+"M");10
2、设置新生代大小
-Xmn1
1
-Xmn3、新生代(eden+2*s)和老年代(不包含永久区)的比值。
4 表示 新生代:老年代=1:4,即年轻代占堆的1/5
-XX:NewRatio1
1
-XX:NewRatio4、设置两个Survivor区和eden的比(s0/s1区,或者叫from/to区,幸存区)
8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10
-XX:SurvivorRatio1
1
-XX:SurvivorRatio5、OOM时导出堆到文件
-XX:+HeapDumpOnOutOfMemoryError1
1
-XX:+HeapDumpOnOutOfMemoryError6、导出OOM的路径(堆dump的时候放置的位置)
-XX:+HeapDumpPath1
1
-XX:+HeapDumpPath7、在OOM时,执行一个脚本
-XX:OnOutOfMemoryError
// %p 是当前线程的pid
-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p
// 当程序OOM时,会执行脚本printstack.bat,如果脚本里写
// D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt 在D:/a.txt中将会生成线程的dump
// 可以在OOM时,发送邮件,甚至是重启程序
8
1
-XX:OnOutOfMemoryError2
3
// %p 是当前线程的pid4
-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p5
// 当程序OOM时,会执行脚本printstack.bat,如果脚本里写6
// D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt 在D:/a.txt中将会生成线程的dump7
// 可以在OOM时,发送邮件,甚至是重启程序8
8、堆的分配参数总结
a)、根据实际事情调整新生代和幸存代的大小
官方推荐新生代占堆的3/8
幸存代占新生代的1/10
在OOM时,记得Dump出堆,确保可以排查现场问题
三、永久区
1、设置永久区的初始空间和最大空间。他们表示,一个系统可以容纳多少个类型
-XX:PermSize -XX:MaxPermSize1
1
-XX:PermSize -XX:MaxPermSize堆空间实际占用非常少。但是永久区溢出 一样抛出OOM
如果堆空间没有用完也抛出了OOM,有可能是永久区导致的
四、栈的分配
1、栈空间分配。
通常只有几百K。决定了函数调用的深度。(会影响递归的次数)
每个线程都有独立的栈空间
局部变量、参数 分配在栈上
-Xss1
1
-Xss