本章知识点
■ 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出堆,确保可以排查现场问题
永久区分配参数
■ -XX:PermSize -XX:MaxPermSize
• 设置永久区的初始空间和最大空间
• 他们表示,一个系统可以容纳多少个类型
■ 使用CGLIB等库的时候,可能会产生大量的类,这些类,有可能撑爆永久区导致OOM
■ 打开堆的Dump
• 堆空间实际占用非常少
• 但是永久区溢出 一样抛出OOM
栈大小分配
■ -Xss
• 通常只有几百K
• 决定了函数调用的深度
• 每个线程都有独立的栈空间
• 局部变量、参数 分配在栈上
网友评论