一、jmap
1、查看java堆使用情况
jmap -heap pid
2、查看堆中对象数量、大小
jmap -histo pid>D:/a.log
class name 解读B代表byte
C代表char
D代表double
F代表float
I代表int
J代表long
Z代表boolean
前边有[代表数组,[I 就相当于int[]
对象用[L+类名表示
3、将内存使用情况输出到文件
jmap -dump:live,file=D:/dump.bin,format=b 7340
--live 代表还在生命周期内
二、jhat
1、查看堆文件
jhat -port 5000 D:/dump.bin
有时你dump出来的堆很大,在启动时会报堆空间不足的错误,可以使用如下参数:
jhat -J-Xmx512m <heap dump file>- grant codebase "file:${java.home}/../lib/tools.jar" {
- permission java.security.AllPermission;
- };
- jstatd -J-Djava.security.policy=d:/java.policy -J-Djava.rmi.server.logCalls=true
3.1 使用cmd命令:jvisualvm --console suppress 可开启独立窗口
四、jstat
4.1 jstat -gcutil [pid] [internal] 很实用,internal 是时间单位毫秒,每隔所烧秒钟输出一次jvm实例为pid的gc信息
S0: Survivor space 0 区已使用空间的百分比
S1: Survivor space 1 区已使用空间的百分比
E: Eden space 区已使用空间的百分比
O: Old space 区已使用空间的百分比
P: Perm space 区已使用空间的百分比
YGC: Young GC 的次数
YGCT: Young GC 所用的时间 单位秒
FGC: Full GC 的次数
FGCT: Full GC 所用的时间 单位秒
GCT: 用于垃圾回收的总时间 单位秒