深入JVM内核—原理、诊断与优化 笔记20170708
常用JVM 配置参数
Trace跟踪参数
-verbose:gc
-verbose:class #跟踪类的加载和卸载,亦可单独配置-XX:+TraceClassLoading跟踪类的加载或单独配置-XX:+TraceClassUnloading
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps #每次GC时会打印程序启动后至GC发生的时间戳。
-Xloggc:log/gc.log
-XX:+TraceClassLoading
-XX:+PrintClassHistogram #打印出实例的数量以及空间大小
-XX:+PrintHeapAtGC #每次GC时会分别打印回收前与回收后堆信息
-XX:+PrintGCApplicationConcurrentTime #打印每次GC时程序运行的时间,当GC后时间置为0.
-XX:+PrintGCApplicationStoppedTime #每次GC使程序停顿的时间
-XX:+PrintReferenceGC #用来跟踪系统内的(softReference)软引用,(weadReference)弱引用,(phantomReference)虚引用,显示引用过程。弱引用,软引用及虚引用对GC的影响
-XX:+PrintVMOptions #打印出JVM接受到的显式(主动配置的)命令行参数
-XX:+PrintCommandLineFlags #打印出显式(主动配置)和隐式(JVM自行设置)
-XX:+PrintFlagsFinal #打印出所有的系统参数值
堆的分配参数
-Xmx20m -Xms5m
-Xmn #设置新生代大小
-XX:NewRatio=1 #新生(eden+2*s)代和老年代(不包含永久代)的比值
-XX:SurvivorRatio=2 #设置两个Survivor区和eden的比值
-XX:+HeapDumpOnOutOfMemoryError
-XX:+HeapDumpPath=d:/a.dump
-XX:OnOutOfMemoryError=D:/printstack.bat %p #在oom时,执行一个脚本
#推荐新生代占堆的3/8,幸存代占新生代的1/10
-XX:PermSize -XXMaxPermSize
栈的分配参数
-Xss 栈的大小
垃圾回收算法
- 引用计数法
- 标记-清除
- 标记-压缩
- 复制算法
GC参数
-XX:+UseSerialGC
新生代、老年代使用串行回收
新生代复制算法,老年代标记-压缩
-XX:+UseParNewGC
-XX:ParallelGCThreads #限制线程数量
新生代并行
老年代串行
复制算法
-XX:+UseParallelGC #使用Parallel收集器+老年代串行
-XX:UseParallelOldGC #使用Parallel收集器+老年代并行
新生代复制算法
老年代 标记-压缩
并行收集器
-XX:MaxGCPauseMills
-XX:GCTimeRatio
CMS收集器
-XX:UseConcMarkSweepGC 老年代并发标记清除
-XX:CMSInitiatingOccupancyFraction 设置触发GC的阈值
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSFullGCsBeforeCompaction
-XX:ParallelCMSThreads
-XX:+CMSClassUnloadingEnabled 运行对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction
-XX:UseCMSInitiatingOccupancyOnly
系统性能监控
linux命令:
uptime
top
vmstat
pidstat #sudo apt-get install sysstat
pidstat -t #显示线程
windows工具
perform #windows自带
Process Explorer
命令行工具:
pslist
java 自带工具
jps -q -m -l -v
jinfo -flag 可以修改部分参数
jmap -histo 2972 > c:\s.txt
jmap -dump:format=b,file=c:\heap.hprof 2971
jstack -l -m -F
- 图形化工具
JConsole
Visual VM

浙公网安备 33010602011771号