1.verbose:gc 打印基本的gc信息
-XX:+printGC 打印基本的gc信息
2.-XX:+PrintGCDetails 打印详细的gc信息
-XX:+PrintGCTimeStamps 打印CG发生的时间戳(1.6 、1.7测试未通过)
3.-XX:+PrintHeapAtGC 每次发生gc后,都打印堆信息
4.-XX:+TraceClassLoading
监控类的加载
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects file]
[Loaded java.lang.reflect.Type from shared objects file]
5.堆参数
-Xmx最大堆 -Xms最小堆(只要jvm一启动至少这么多内存空间是要占用的)
-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
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
-XX:OnOutOfMemoryError 可以发送邮件,重启程序等
在OOM时,执行一个脚本
"-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“
当程序OOM时,在D:/a.txt中将会生成线程的dump
可以在OOM时,发送邮件,甚至是重启程序
D:/tools/jdk1.7_40/bin/jstack -F %1 > D:/a.txt --->printstack.bat中的内容
官方建议:
根据实际事情调整新生代和幸存代的大小
官方推荐新生代占堆的3/8
幸存代占新生代的1/10
在OOM时,记得Dump出堆,确保可以排查现场问题
永久区:
-XX:PermSize -XX:MaxPermSize
设置永久区的初始空间和最大空间
他们表示,一个系统可以容纳多少个类型
指定栈大小
-Xss
打开关闭各个jvm共享内存(指各个java线程共享基础的类)
-Xshare:on / off