Trace跟踪参数

1.-verbose:gc

2.-XX:+printGC

可以打印GC的简要信息 [GC 51790K->1374K(115872K), 0.0001606 secs]

3.-XX:+PrintGCDetails(打印GC详细信息)

4.-XX:+PrintGCTimeStamps(打印CG发生的时间戳 )

[GC[DefNew: 6716K->0K(4528K), 0.0007 secs] 8790K->374K(15872K), 0.0002232 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] - 5.-XX:+PrintGCDetails的输出

6.-Xloggc:log/gc.log (制定GC的输出位置)

7.-XX:+PrintHeapAtGC(每次一次GC后,都打印堆信息)

8.-XX:+TraceClassLoading (打印class的加载) 9.-XX:+PrintClassHistogram(按下Ctrl+C后,打印类的信息)

堆的分配参数

1.-Xmx –Xms(指定最大堆和最小堆)

 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");

2.-Xmn(设置新生代大小)

3.-XX:NewRatio

新生代(eden+s0+S1)和老年代(不包含永久区)的比值。

这个值其实是年老代与年轻代的比值,-XX:NewRatio=4表示年老代与年轻代的比值为4:1 即年轻代占堆的1/5

4.-XX:SurvivorRatio

设置两个Survivor区和eden的比8表示 两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10(会有一个s空置) 为什么需要两个s区?

堆的分配参数

1.-XX:+HeapDumpOnOutOfMemoryError (OOM时导出堆到文件)

2.-XX:+HeapDumpPath(导出OOM的路径)

-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump

3.-XX:OnOutOfMemoryError

在OOM时,执行一个脚本 "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“ 当程序OOM时,在D:/a.txt中将会生成线程的dump 可以在OOM时,发送邮件,甚至是重启程序

非堆的分配参数

1.-XX:PermSize(表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存))

2、-XX:MaxPermSize(表示对非堆区分配的内存的最大上限)

方法区和运行时常量

3.-Xss 栈内存大小

4.-XX:MaxDirectMemorySize 直接内存大小 不指定默认和堆的Xmx一样大小。

总结

根据实际事情调整新生代和幸存代的大小

官方推荐新生代占堆的3/8

幸存代占新生代的1/10

在OOM时,记得Dump出堆,确保可以排查现场问题