本章知识点
■?Trace跟踪参数
■ 堆的分配参数
■ 栈的分配参数
Trace跟踪参数
■ -verbose:gc
■ -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:+PrintGCDetails:打印GC详细信息
■?-XX:+PrintGCTimeStamps:打印GC发生的时间戳
■?[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的输出
????? Heap
????? def new generation?? total 13824K, used 11223K [0x27e80000, 0x28d80000, 0x28d80000)
??????eden space 12288K,? 91% used [0x27e80000, 0x28975f20, 0x28a80000)
??????from space 1536K,?? 0% used [0x28a80000, 0x28a80000, 0x28c00000)
??????to?? space 1536K,?? 0% used [0x28c00000, 0x28c00000, 0x28d80000)
????? tenured generation?? total 5120K, used 0K [0x28d80000, 0x29280000, 0x34680000) ??????the space 5120K,?? 0% used [0x28d80000, 0x28d80000, 0x28d80200, 0x29280000) ????? compacting perm gen? total 12288K, used 142K [0x34680000, 0x35280000, 0x38680000)
??????the space 12288K,?? 1% used [0x34680000, 0x346a3a90, 0x346a3c00, 0x35280000)
·? ???ro space 10240K,? 44% used [0x38680000, 0x38af73f0, 0x38af7400, 0x39080000)? ??????rw space 12288K,? 52% used [0x39080000, 0x396cdd28, 0x396cde00, 0x39c80000)
■ -Xloggc:log/gc.log
???? ? 指定GC log的位置,以文件输出
???? ? 帮助开发人员分析问题
■?-XX:+TraceClassLoading
? ?? ??监控类的加载
■?-XX:+PrintClassHistogram
??? ? 按下Ctrl+Break后,打印类的信息
堆的分配参数
■? -Xmx –Xms
????? 指定最大堆和最小堆
? ??? -Xmx20m -Xms5m? 运行代码
■?-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
? ? ? OOM时导出堆到文件
■?-XX:+HeapDumpPath
? ??? 导出OOM的路径值
■?-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时,发送邮件,甚至是重启程序?
堆的分配参数 – 总结
■ 根据实际事情调整新生代和幸存代的大小
■?官方推荐新生代占堆的3/8
■?幸存代占新生代的1/10
■?在OOM时,记得Dump出堆,确??梢耘挪橄殖∥侍?/p>
永久区分配参数
■?-XX:PermSize ?-XX:MaxPermSize
? ?? ??设置永久区的初始空间和最大空间
? ?? ? 他们表示,一个系统可以容纳多少个类型
■?使用CGLIB等库的时候,可能会产生大量的类,这些类,有可能撑爆永久区导致OOM
■ 打开堆的Dump
? ? ? 堆空间实际占用非常少
? ??? 但是永久区溢出 一样抛出OOM
栈大小分配
■?-Xss
????? 通常只有几百K
????? 决定了函数调用的深度
????? 每个线程都有独立的栈空间
????? 局部变量、参数 分配在栈上