下面详细讲一下jmap
JMAP
自己常用的顺序命令
先找到JDK安装目录下bin文件夹(默认安装目录为C:\Program Files\Java\jdk1.8.0_91\bin)
双击将窗口方法(这一步是为了能快速点击空白位置,这个文件夹里面内容比较多)
按住shift 同时点击鼠标右键,再弹出内容中选择在此处打开PowerShell窗口。
1.通过jps 找到自己想要查看的java程序的pid(在powerShell里输入jps 按下tab就可以了)
.\jps.exe
数字(PID) 英文(程序名称)
2.如果是普通的java运行类或者依赖少的可以直接使用下面命令查看内容
.\jmap.exe -histo 数字
3.如果想看详细jmap 命令有啥功能或者描述
.\jmap.exe //直接回车
4. 有人可能并不是能看懂下面说的或者说看了也看不明白如何使用哈,这面简单的解释一下
看其中有一行为 -histo[:live] 就是打印‘活着’的对象信息。
别直接写成
.\jmap.exe -histo[:live] 17600
正确的写法是
.\jmap.exe -histo:live 17600
所以分析得知[] 中括号在这里面是指:可以写里面的内容或者不写
5.接下来是 -dump这个命令 我相信不止我一个没好好看文档就直接这么写的吧
.\jmap.exe -dump:live 18964
正确写法其实上面都给了示例了
.\jmap.exe -dump:live,format=b,file=C:\User\admin\Desktop\b.log 18964
打开b.log 差不多是这种效果(需要安装二进制阅读插件 ,如需要下面评论找我哈)
6.下面介绍下jmap 下的heap命令
.\jmap.exe -heap pid
功能打印堆摘要。使用的GC算法、堆配置和生成时的堆使用情况。
详细分析下这些信息
Attaching to process ID 18964, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.91-b15
using thread-local object allocation.
Parallel GC with 8 thread(s) //八个GC线程并行
Heap Configuration:
MinHeapFreeRatio = 0 //JVM最小空闲比率 可由-XX:MinHeapFreeRatio=<n>参数设置,jvm heap 在使用率小于n时,heap 进行收缩
MaxHeapFreeRatio = 100 // JVM最大空闲比率 可由-XX:MaxHeapFreeRatio=<n>参数设置,jvm heap 在使用率大于n时,heap进行扩张
MaxHeapSize = 2061500416 (1966.0MB) // JVM堆的最大大小,可由-XX:MaxHeapSize=<n> 参数设置
NewSize = 42991616 (41.0MB) // JVM新生代的默认大小,可由-XX:NewSize=<n> 参数设置
MaxNewSize = 686817280 (655.0MB) // JVM 新生代的最大大小,可由-XX:MaxNewSize=<n>参数设置
OldSize = 87031808 (83.0MB) //JVM 老生代的默认大小,可由-XX:OldSize=<n>参数设置
NewRatio = 2 // 新生代:老生代(的大小) =1:2 可由-XX:NewRatio=<n>参数指定New Generation与Old Generation heap size的比例
SurvivorRatio = 8 // suervivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域]可由-XX:SurvivorRatio=<n>参数设置
MetaspaceSize = 21807104 (20.796875MB) //元空间的默认大小,超过此值就会触发Full GC 可由-XX:MetaspaceSize=<n>参数设置
CompressedClassSpaceSize = 1073741824 (1024.0MB) // 类指针压缩空间的默认大小 可由-XX:CompressedClassSpaceSize=<n> 参数设置
MaxMetaspaceSize = 17592186044415 MB //元空间的最大大小 可由-XX:MaxMetaspaceSize=<n>参数设置
G1HeapRegionSize = 0 (0.0MB) //使用G1垃圾收集器的时候,堆被分割的大小 可由-XX:G1HeapRegionSize=<n>参数设置
Heap Usage:
PS Young Generation //新生代区域分配情况
Eden Space: // Eden区域分配情况
capacity = 32505856 (31.0MB)
used = 0 (0.0MB)
free = 32505856 (31.0MB)
0.0% used
From Space: // 其中一个Survivor区域分配情况
capacity = 5242880 (5.0MB)
used = 0 (0.0MB)
free = 5242880 (5.0MB)
0.0% used
To Space: // 另一个Survivor区域分配情况
capacity = 5242880 (5.0MB)
used = 0 (0.0MB)
free = 5242880 (5.0MB)
0.0% used
PS Old Generation //老生代区域分配情况
capacity = 33554432 (32.0MB)
used = 941720 (0.8980941772460938MB)
free = 32612712 (31.101905822753906MB)
2.806544303894043% used
2055 interned Strings occupying 181832 bytes.
(有人应该不知道如何将cmd中的信息如何打印到文件中,可以使用)
.\jmap.exe -heap 18964 > C:\Users\admin\Decktop\c.log
这里使用 > 加 路径的方式 ,这种方式所有的命令几乎都适用并不是只适用于jmap
Heap Configuration: 参数如果想要更改 可以使用-XX:参数=数值。 这种方式进行修改。