1、jvm参数类型:标准参数、X参数、XX参数
标准参数:例如-help、-server、-client、-version、-showversion、-cp、-classpath;在jdk的各个版本中,基本是不变的,java -version
X参数:即非标准化参数,才jdk各个版本中变化的可能性很大,
-Xint::该参数完全解释执行,不会把java代码转化成本地代码
-Xcomp:第一次使用就编译成本地代码,可想而知第一次比较慢
-Xmixed:混合模式,JVM自己来决定是否编译成本地代码
java执行有解释执行和编译执行,不能说完全解释执行和编译执行
C:\Users\Administrator>java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) Client VM (build 25.172-b11, mixed mode, sharing)
默认采取的是mixed mode
改成解释执行Xint
C:\Users\Administrator>java -Xint -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) Client VM (build 25.172-b11, interpreted mode, sharing)
改成编译执行Xcomp
C:\Users\Administrator>java -Xcomp -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) Client VM (build 25.172-b11, compiled mode, sharing)
XX参数:非标准化参数,相对不稳定,主要用于JVM调优和Debug
Boolean类型:格式-XX:[+-]<name>表示启用或者禁用name属性,+是启用,-禁用
比如:-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
非Boolean类型:格式-XX:<name>=<value> 表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500 GC的最大停顿时间
-XX:GCTimeRatio=19
-Xmx -Xms -xss是XX参数, -xss是设置堆得
ps -ef| grep tomcat
查看进程堆大小:jinfo -flag MaxHeapSize 23789
查看线程堆栈的大小 jinfo -flag ThreadStackSize 23789
2、查看JVM运行时参数
-XX:+PrintFlagsInitial 查看一些初始值
-XX:+PrintFlagsFinal 查看最终的值
-XX:+UnlockExperimentalVMOptions 解锁实验参数
-XX:+UnlockDiagnosticVMOptions 解锁诊断参数
-XX:+PrintCommandLineFlags 打印命令行参数
java -XX:+PrintFlagsFinal -version 结果 =是默认的, false代表没有启用
重定向到一个文件中:java -XX:+PrintFlagsFinal -version >flags.txt,即会在当前路径生产一个flags.txt文件
jps:专门用来查看java
如何查看已经正在运行的JVM jinfo
也可以这么查 jinfo -flags 23789
3、 jstat查看jvm虚拟机统计信息
可以查看类加载的信息、垃圾收集信息、JIT编译,
命令: jstat -help
查看进程23789的类加载信息,jstat -class 23789
查看垃圾回收信息:jstat -gc 23789
jstat -gc 23789 1000 10 实时查看内存变化情况,10代表10秒钟输出一次
查看进程编译信息jstat -compiler 23789
4、jmap+MAT实战内存溢出
5、如何导出内存映象文件
内存溢出自动导出
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
只需把两个参数放在run congration--->vm 和堆栈设置大小一样
使用jmap命令手动导出
jps查看id
由此可以看出59.28%出现了内存溢出
6、jstack实战死循环与死锁