最近在看<<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程序员修炼之道>>