jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。如果不使用jmap命令,也可以在启动虚拟机时添加-XX:HeapDumpOnOutOfMemoryError参数,当虚拟机发生内存溢出异常之后就会自动生成堆转储快照文件;通过添加-XX:HeapDumpOnCtrlBreak参数,可以使用[Ctrl]+[Break]键让虚拟机生成堆转储快照文件。此外,在Linux系统下,通过发送kill -3命令发送进程退出信号“恐吓”一下虚拟机,也能拿到堆转储快照。
jmap命令不仅能获取堆转储快照,还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前使用到时哪种垃圾收集器等。在Windows下,仅-dump和-histo选项可以使用,其余的在Linux/Solaris平台下才有效。
jmap的命令格式:
jmap [option] vmid
option选项的合法值和含义如下:
-dump 生成Java堆转储快照。格式为-dump:[live,]format=b,file=<filename>,其中live子参数说明是否只dump出存活的对象
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。只在Linux/Solaris平台下有效。
-heap 显示Java堆详细信息,如使用哪种垃圾收集器、参数配置、分代状况等。只在Linux/Solaris平台下有效。
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量。
-permstat 以ClassLoader为统计口径显示永久代内存状态。只在Linux/Solaris平台下有效。
-F 当虚拟机进程堆-dump选项没有响应时,可使用这个选项强制生成dump快照。只在Linux/Solaris平台下有效。
使用示例: