下面详细讲一下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 数字

java jmap histo里的Script_ 是什么 jmap histo 前几条_java

3.如果想看详细jmap 命令有啥功能或者描述
.\jmap.exe //直接回车

java jmap histo里的Script_ 是什么 jmap histo 前几条_sed_02

4. 有人可能并不是能看懂下面说的或者说看了也看不明白如何使用哈,这面简单的解释一下
看其中有一行为 -histo[:live] 就是打印‘活着’的对象信息。
别直接写成
.\jmap.exe -histo[:live] 17600
正确的写法是
.\jmap.exe -histo:live 17600
所以分析得知[] 中括号在这里面是指:可以写里面的内容或者不写

java jmap histo里的Script_ 是什么 jmap histo 前几条_java_03

5.接下来是 -dump这个命令 我相信不止我一个没好好看文档就直接这么写的吧
.\jmap.exe -dump:live 18964
正确写法其实上面都给了示例了
.\jmap.exe -dump:live,format=b,file=C:\User\admin\Desktop\b.log 18964

打开b.log 差不多是这种效果(需要安装二进制阅读插件 ,如需要下面评论找我哈)

java jmap histo里的Script_ 是什么 jmap histo 前几条_java_04

6.下面介绍下jmap 下的heap命令
.\jmap.exe -heap pid
功能打印堆摘要。使用的GC算法、堆配置和生成时的堆使用情况。

java jmap histo里的Script_ 是什么 jmap histo 前几条_sed_05

详细分析下这些信息

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:参数=数值。 这种方式进行修改。