一、三种参数类型
1、标准参数:比较稳定,以后版本会保留
-help
-version
2、-X参数(非标准参数)
-Xint
-Xcomp
3、-XX参数(非标准参数,使用率较高)
-XX:newSize
-XX:+UseSerialGC
二、标准参数
一般都是很稳定的,在未来jvm版本中不会改变,可以使用java -help检索出所有的标准参数。
三、-X参数
非标准选项,如有更改,恕不另行通知。
使用java -X检索出-X的参数。
-Xint,-Xcomp,-Xmixed
-Xint会强制JVM执行所有的字节码,会降低运行速度,通常低10倍或更多。
-Xcomp与-Xint相反,会把所有的字节码编译成本地代码。
-Xmixed是混合模式,是JVM的默认模式,推荐。
四、-XX参数
主要用于JVM的调优和debug操作。有两种,boolean类型和非boolean类型。
boolean类型
格式:-XX:[+-]<name> 表示启用或禁用<name>属性。
如:-XX:+DisableExplicitGC 表示禁止用手动调用gc操作,也就是System.gc()无效。
非boolean类型
格式:-XX:<name>=<value> 表示<name>属性的值为<value>。
如:-XX:NewRatio=1表示新生代和老年代的比值。
-Xms 与 -Xmx参数
-Xms512m:等价于-XX:InitialHeapSize=512m,设置初始堆内存为512M。
-Xmx2048m:等价于-XX:MaxHeapSize=2048m,设置最大堆内存为2048M。
java -Xms128m -Xmx256m 类
五、查看jvm的运行参数
1、运行java命令时打印参数
添加参数-XX:+PrintFlagsFinal。
2、查看正在运行的jvm参数
查看所有java进程:jps -l。
查看某进程的jvm参数:jinfo -flags ${pid} / jinfo -flag <参数名> ${pid}。
六、jvm的内存模型
1、jdk1.7的堆内存模型
Young年轻代
Tenured老年代:主要保存生命周期长的对象,一般是一些老的对象。
Perm永久代:主要保存class,method,file对象,这部分的空间一般不会溢出,除非加载了很多的类。
2、jdk1.8的堆内存模型
Young年轻代
Tenured老年代
元空间(占用系统内存) metaspace所占用的内存空间不是在虚拟机内部,而是在本地空间中,这也是与jdk1.7的永久代最大的区别。
3、查看堆内存使用情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。
jstat [-命令选项] [进程id] [间隔时间/毫秒] [查询次数]
例1:查看class加载统计
C:Userslenovo>jstat -class 11976
Loaded Bytes Unloaded Bytes Time
4730 9436.1 0 0.0 10.54
说明:
loaded:加载class的数量
bytes:所占用空间大小
unloaded:未加载占用空间
time:时间
例2:查看编译统计
C:Userslenovo>jstat -compiler 11976
Compiled Failed Invalid Time FailedType FailedMethod
2970 0 0 13.28 0
说明:
compiled:编译数量
failed:失败数量
invalid:不可用数量
time:时间
failedType:失败类型
failedMethod:失败的方法
例3:垃圾回收统计
jstat -gc 11976
S0C S1C S0U S1U EC EU OC
24576.0 25600.0 0.0 0.0 206336.0 54242.5 59392.0
OU MC MU CCSC CCSU YGC YGCT FGC
27371.7 27096.0 26635.1 3200.0 3028.4 17 0.210 2
FGCT GCT
0.160 0.370
说明:
S0C:第一个survivor区的大小(kb)
S1C:第二个survivor区的大小(kb)
S0U:第一个survivor区的使用大小(kb)
S1U:第二个survivor区的使用大小(kb)
EC:Eden区的大小 (kb)
EU:Eden区的使用大小 (kb)
OC:Old区的大小 (kb)
OU:Old区的使用大小 (kb)
MC:方法区的大小 (kb)
MU:方法区的使用大小 (kb)
CCSC:压缩类空间大小(kb)
CCSU:压缩类空间使用大小(kb)
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间
七、jmap的使用以及内存溢出分析
1、查看内存使用情况
jmap -heap 11976
2、查看内存中对象数量及大小
查看所有对象,包括活跃及非活跃:jmap -histo ${pid} | more
查看活跃对象:jmap -histo:live ${pid} | more
3.将内存使用情况dump到文件中
#用法 b代表二进制 jmap -dump:format=b,file=dumpFileName <pid> #示例 jmap -dump:format=b,file=C://abc 1154
4.通过jhat对dump文件进行分析
#用法 jhat -port <port> <file> #示例 jhat -port 9999 C:abc
浏览器访问localhost:9999查询
点击OQL help,使用OQL查询,可以找出个个类对象的个数 比如:(select S from java.lang.String s where s.value.length>=1000)