jmap -histo 4939
2)基本参数:
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-F **.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
-h | -help 打印辅助信息
-J 传递参数给jmap启动的jvm.
pid 需要被打印配相信息的java进程id,创业与打工的区别 - 博文预览,可以用jps查问.
jmap 能查看jvm内存中,对象占用内存的情况,还提供非常方便的命令将jvm的内存信息导出的文件。
- jmap -dump:format=b,file=heap.bin <pid>
命令jhat 能够解析 java内存堆的文件,生成相关信息,并启动webServer提供查询。 也就说,我们可以通过浏览器来看这些内存信息。jhat还提供了一个类sql的查询语言---OQL来给我们使用。
jmap导出内存情况后,可以用MemoryAnalyzer进行内存分析。
执行一下
- jhat -J-Xmx512m heap.bin
就可以将我们刚刚使用jmap导出的内存信息交给jhat解析了。默认的情况下,它会监听7000端口。我在本机的地址就是,http://localhost:7000/。
访问http://localhost:7000/histo/,大致可以看到一下的画面,这里列出对象,对象实例数量、总占用内存大小。点击进去之后可 以看到“谁引用了这个对象,这个对象又引用了哪个”这些信息。不过因为展示的信息非常多,并没有想象中那样清晰可见。