JVM:实战
参数
标准参数:不会随着JDK版本的变化而变化
java -version/-help
-X参数:
非标准参数:随着JDK版本变化而变化
- Xint:解释执行
- Xcomp:编译执行
- Xmix:混合执行
-XX参数
boolean类型
-XX:[+/-]name:启动或停止
-XX: +UseSerialGC
非boolean类型
-XX:name=value
-XX:MaxHeapSize=100M
其他参数(等同于-XX参数)
-Xms100M ===> -XX:InitialHeapSize=100M
-Xmx100M ===> -XX:MaxHeapSize=100M
-Xss100k ===> -XX:ThreadStackSize=100k
查看所有的参数
-XX:+PrintFlagsFinal
使用命令
- idea/ecplipse
- java -XX:+UseG1GC xxx.jar
- 实时修改 jinfo
常用参数
命令
- jps:查看当前java进程状态。java process status。
- jinfo:查看或修改JVM参数。jinfo -flag UseG1GC PID
实时修改值:jinfo -flag name=value PID(只有manageble参数才可以被修改) - jstat:jstat -class/-gc PID 时间 次数。
- jstack:jstack PID,打印出PID进程中线程的情况,用来排查线程问题。
- jmap:生成堆内存的快照 jmap -heap PID;jmap -dump:format=b,file=heap.hprof PID
工具
- jconsole
- jvisualvm
调优的维度
堆
OOM,排查哪个对象占用的内存空间比较大
垃圾回收
MA Memory Analyzer:打开heap.hprof文件
查看线程上下文切换状态
vmstat可以查看上下文切换的次数
Lmbench3可以查看上下文切换的市场