jmap

最近在看<<Java程序员修炼之道>>,看到性能调优jmap部分,故整理记录。

jmap

用来显示Java进程的内存映射

jmap主要有两个常用的选择:-heap和-histo

选项:-heap(堆视图)

使用-heap选项时,jmap会抓取进程当前的堆快照。在输出结果中能看到构成Java进程堆内存的基本构成(年轻代,老年代...),和它们的参数

 可以看到SurvivorRatio = 8,表示survivor区占用1/8的Eden内存,即一个survivor区占用1/10的新生代内存,但是我们可以看到上面的截图并不满足,这是为什么呢?这是因为-XX:SurvivorRatito这个参数会被忽略当开启了-XX:+UseAdaptiveSizePolicy,因为当启用该参数,又是并行垃圾处理时,jvm会动态调整年轻代大小和相应的Survivor去比例。

选项:-histo(柱状视图)

柱状视图显示了系统中每个类型的实例(包括内部实体)占用的内存量。各个类型按使用内存多少排列。

还有一个-histo:live选项:这个选项告诉jmap只处理存活对象,而不是整个堆(jmap默认会处理所有对象,也包括还没被收集的垃圾)

 

其他选项:

   -dump : 创建导出文件,该文件可以用来做离线分析。

-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>

  eg: jmap -dump:live, format=b, file=heap.hprof 3356

 没有选项 :这可以用来查看连接到进程里的本地类库

eg:可以看到连接了很多本地类库 .

 

参考:<<Java程序员修炼之道>>

posted @ 2013-11-09 10:02  bells  阅读(1010)  评论(0编辑  收藏  举报