gc日志
- java -XX:+PrintGCDetails 类名
- java -Xloggc:gc.demo.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps 类名
- 串行gc:java -XX:+UseSerialGC -Xms512m -Xmx512m -Xloggc:gc.demo.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps 类名 (因为是单线程,如果触发full gc后没有将老年代的内存清理出空间,将会循环full gc)
- 并行gc:java -XX:+UseParallelGC -Xms512m -Xmx512m -Xloggc:gc.demo.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps 类名
- cms gc: java -XX:+UseConcMarkSweepGC 。。。
JVM 线程堆栈数据分析
TLAB:堆中有一块区域专门放线程相关的参数 xss-该区域的大小设置
内存分析
- 一个java对象占用多少内存
可以使用 Instrumentation.getObjectSize()方法来估算一个对象占用的内存空间
JVM 问题分析调优经验
- 高分配速率(High Allocation Rate)
- 过早提升(Premature Promotion)
- 增大年轻代的大小
- 减少每次批处理的大小
GC 疑难情况问题分析
- Arthas 诊断分析工具