【深入JVM】JVM工具之JMAP

一、工具介绍

如果把java\bin目录配置到环境变量,在cmd输入jmap会有如下提示:

翻译:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。

二、工具用法

jmap [ option ] pid

jmap [ option ] executable core

jmap [ option ] [[email protected]]remote-hostname-or-IP

2.1)、options:

executable Java executable from which the core dump was produced.

(可能是产生core dump的java可执行程序)

core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

2.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查问.

三、测试代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.ManagementFactory;

public class JMapStudy {

	public static void main(String[] args) {
		//Gets the currentProcess's name
		String name = ManagementFactory.getRuntimeMXBean().getName();

		//result Format:[email protected]
		String pid = name.split("@")[0];
		String command = "tasklist /fi \"pid eq " + pid + "\"";
		executeCmd(command);
		new JMapThread().start();
		command = "jmap -histo " + pid;
		executeCmd(command);

	}

	/**
	 * Executes the special command by means of runtime, and output the result
	 * to console
	 *
	 * @param command
	 */
	public static void executeCmd(String command) {
		try {
			String s;
			Process process = Runtime.getRuntime().exec(command);
			BufferedReader bufferedReader =

			new BufferedReader(new InputStreamReader(process.getInputStream()));
			while ((s = bufferedReader.readLine()) != null)
				System.out.println(s);
			process.waitFor();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

class JMapThread extends Thread
{
	/**
	 * This method is used for creating a process to be tested memory.
	 */
	public void run() {

		for (int i = 0; i < 10; i++) {
			try {
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("now i :" + i);
		}
	}
}

四、运行结果

映像名称                       PID 会话名              会话#       内存使用
========================= ======== ================ =========== ============
javaw.exe                    12928 Console                    1     13,864 K
now i :0
now i :1
now i :2

 num     #instances         #bytes  class name
----------------------------------------------
   1:          1518         280472  [C
   2:          1020         182192  <symbolKlass>
   3:           107         110032  [B
   4:            30          96184  [I
   5:          1398          33552  java.lang.String
   6:           259          27200  <constMethodKlass>
   7:           774          24768  java.util.TreeMap$Entry
   8:           259          20976  <methodKlass>
   9:            21          15344  <constantPoolKlass>
  10:           332          14280  [Ljava.lang.Object;
  11:            39          12792  <objArrayKlassKlass>
  12:            21           8864  <instanceKlassKlass>
  13:            21           6440  <constantPoolCacheKlass>
  14:           192           6128  [Ljava.lang.String;
  15:            76           6080  java.lang.reflect.Method
  16:            60           5760  java.lang.Class
  17:           103           4944  java.nio.HeapCharBuffer
  18:            47           3968  [S
  19:            60           2880  java.nio.HeapByteBuffer
  20:            40           2880  java.lang.reflect.Field
  21:           115           2288  [Ljava.lang.Class;
  22:            23           2096  [Ljava.util.HashMap$Entry;
  23:            51           2088  [[I
  24:            83           1992  java.util.Hashtable$Entry
  25:            13           1400  [Ljava.util.Hashtable$Entry;
  26:            83           1328  java.lang.StringBuilder
  27:            53           1272  java.util.HashMap$Entry
  28:            32           1024  java.util.concurrent.ConcurrentHashMap$Segment
  29:            15            840  java.net.URL
  30:            32            768  java.util.concurrent.locks.ReentrantLock$NonfairSync
  31:            35            752  [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;
  32:            45            720  java.io.File
  33:            10            640  java.lang.reflect.Constructor
  34:            16            640  java.util.HashMap
  35:            19            608  java.util.LinkedHashMap$Entry
  36:            19            608  java.util.Locale
  37:            18            576  java.lang.ref.Finalizer
  38:            36            576  java.lang.ProcessEnvironment$CheckedEntry
  39:             5            520  java.lang.Thread
  40:            20            480  java.util.concurrent.ConcurrentHashMap$HashEntry
  41:            14            448  java.lang.ref.SoftReference
  42:             7            392  sun.nio.cs.ext.GBK$Decoder
  43:            21            336  java.lang.StringBuffer
  44:            10            320  java.io.ObjectStreamField
  45:             2            320  [Ljava.lang.reflect.Method;
  46:            13            312  java.io.ExpiringCache$Entry
  47:            13            312  java.io.FileDescriptor
  48:            17            272  sun.security.action.GetPropertyAction
  49:            11            264  java.net.Parts
  50:            10            240  java.security.AccessControlContext
  51:             5            240  java.util.TreeMap
  52:             6            240  java.util.Hashtable
  53:             9            216  java.util.ArrayList
  54:             5            200  sun.misc.URLClassPath$JarLoader
  55:             4            184  [Ljava.lang.reflect.Field;
  56:             7            168  java.util.Vector
  57:             3            168  sun.nio.cs.ext.GBK$Encoder
  58:             2            160  [Ljava.util.concurrent.ConcurrentHashMap$Segment;
  59:             4            160  java.util.StringTokenizer
  60:             8            152  [Ljava.io.ObjectStreamField;
  61:             3            144  java.io.BufferedReader
  62:             9            144  java.io.FileInputStream
  63:             4            128  java.io.BufferedInputStream
  64:             5            120  sun.reflect.NativeConstructorAccessorImpl
  65:             3            120  sun.nio.cs.StreamDecoder
  66:             2            112  java.io.ExpiringCache$1
  67:             1            104  JMapThread
  68:             1            104  java.lang.ref.Finalizer$FinalizerThread
  69:            13            104  java.lang.Object
  70:             1            104  java.lang.ref.Reference$ReferenceHandler
  71:             2             96  java.net.Inet6Address
  72:             1             96  sun.net.www.protocol.file.FileURLConnection
  73:             2             96  sun.nio.cs.StreamEncoder
  74:             3             96  java.lang.ClassLoader$NativeLibrary
  75:             4             96  java.io.FileOutputStream
  76:             6             96  sun.misc.URLClassPath$3
  77:             2             96  java.lang.ThreadGroup
  78:             4             96  java.lang.OutOfMemoryError
  79:             2             96  java.util.Properties
  80:             2             96  java.util.LinkedHashMap
  81:             4             96  java.io.BufferedOutputStream
  82:             5             80  [Ljava.lang.reflect.Constructor;
  83:             5             80  java.lang.Boolean
  84:             5             80  sun.misc.MetaIndex
  85:             1             80  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
  86:             5             80  sun.reflect.DelegatingConstructorAccessorImpl
  87:             2             80  java.util.concurrent.ConcurrentHashMap
  88:             2             80  java.io.BufferedWriter
  89:             2             80  java.lang.ProcessImpl
  90:             5             80  java.lang.Class$1
  91:             3             72  java.util.Stack
  92:             3             72  java.lang.RuntimePermission
  93:             3             72  java.lang.ref.WeakReference
  94:             3             72  java.lang.NoSuchMethodError
  95:             1             72  sun.misc.Launcher$AppClassLoader
  96:             1             72  sun.misc.Launcher$ExtClassLoader
  97:             3             72  sun.nio.cs.Surrogate$Parser
  98:             2             64  java.lang.ClassNotFoundException
  99:             2             64  java.io.PrintStream
 100:             2             64  sun.misc.URLClassPath$FileLoader$1
 101:             2             64  java.io.FilePermission
 102:             2             64  [Ljava.lang.Thread;
 103:             4             64  java.lang.Integer
 104:             2             64  java.security.CodeSource
 105:             2             64  java.lang.ThreadLocal$ThreadLocalMap$Entry
 106:             4             64  java.net.URLClassLoader$1
 107:             1             64  java.util.regex.Pattern
 108:             2             64  java.util.LinkedHashMap$KeyIterator
 109:             2             64  sun.misc.URLClassPath
 110:             2             64  java.security.PrivilegedActionException
 111:             2             64  java.util.LinkedList$ListItr
 112:             2             64  java.io.ExpiringCache
 113:             1             64  java.util.regex.Matcher
 114:             1             56  [Ljava.util.regex.Pattern$GroupHead;
 115:             3             56  [Ljava.io.File;
 116:             3             48  java.lang.ThreadLocal
 117:             2             48  java.lang.ref.ReferenceQueue
 118:             2             48  [Ljava.net.URL;
 119:             3             48  java.lang.ClassLoader$3
 120:             1             48  [J
 121:             2             48  java.lang.ProcessBuilder
 122:             3             48  java.nio.charset.CodingErrorAction
 123:             2             48  java.net.InetAddress$CacheEntry
 124:             2             48  java.util.LinkedList$Entry
 125:             2             48  java.security.Permissions
 126:             2             48  java.lang.ref.ReferenceQueue$Null
 127:             2             48  java.util.LinkedList
 128:             2             48  java.net.Inet4Address
 129:             2             48  java.lang.management.ManagementPermission
 130:             2             48  java.io.InputStreamReader
 131:             2             48  java.io.OutputStreamWriter
 132:             1             40  java.lang.ProcessEnvironment
 133:             1             40  sun.nio.cs.StandardCharsets$Classes
 134:             1             40  sun.nio.cs.StandardCharsets$Cache
 135:             1             40  java.util.Properties$LineReader
 136:             2             40  [Ljava.net.InetAddress;
 137:             5             40  java.lang.Class$3
 138:             1             40  sun.nio.cs.StandardCharsets$Aliases
 139:             1             32  java.security.ProtectionDomain
 140:             2             32  java.nio.charset.CoderResult
 141:             2             32  sun.security.action.LoadLibraryAction
 142:             1             32  sun.misc.SoftCache
 143:             2             32  sun.misc.Signal
 144:             1             32  sun.nio.cs.ext.ExtendedCharsets
 145:             2             32  java.lang.ProcessImpl$1
 146:             1             32  java.util.Collections$SynchronizedMap
 147:             2             32  java.nio.ByteOrder
 148:             4             32  java.lang.ref.ReferenceQueue$Lock
 149:             2             32  java.util.HashSet
 150:             1             32  [Ljava.lang.ThreadGroup;
 151:             2             32  java.net.InetAddress$Cache
 152:             2             32  java.io.FilePermission$1
 153:             1             32  java.util.RandomAccessSubList
 154:             2             32  java.net.InetAddress$Cache$Type
 155:             1             32  java.util.AbstractList$ListItr
 156:             2             32  sun.misc.NativeSignalHandler
 157:             1             32  [Ljava.lang.OutOfMemoryError;
 158:             1             32  java.util.HashMap$EntryIterator
 159:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 160:             4             32  sun.reflect.ReflectionFactory$GetReflectionFactoryAction
 161:             1             24  sun.management.VMManagementImpl
 162:             1             24  java.security.BasicPermissionCollection
 163:             1             24  java.lang.StringCoding$StringDecoder
 164:             1             24  sun.misc.Launcher$AppClassLoader$1
 165:             1             24  java.io.WinNTFileSystem
 166:             1             24  java.lang.reflect.ReflectPermission
 167:             1             24  [Ljava.net.InetAddress$Cache$Type;
 168:             3             24  sun.reflect.ReflectionFactory$1
 169:             1             24  java.util.regex.Pattern$TreeInfo
 170:             1             24  java.lang.NumberFormatException
 171:             1             24  sun.security.action.GetIntegerAction
 172:             1             24  sun.nio.cs.StandardCharsets
 173:             1             24  java.util.SubList$1
 174:             1             24  java.lang.ThreadLocal$ThreadLocalMap
 175:             1             24  sun.nio.cs.ext.GBK
 176:             1             24  java.lang.StringCoding$StringEncoder
 177:             1             24  sun.management.RuntimeImpl
 178:             1             24  java.util.BitSet
 179:             1             24  sun.net.www.MessageHeader
 180:             1             24  java.io.FileReader
 181:             1             24  java.lang.ref.Reference
 182:             1             24  java.util.Collections$UnmodifiableMap
 183:             1             16  sun.misc.Launcher$ExtClassLoader$1
 184:             1             16  [Ljava.security.Principal;
 185:             1             16  java.lang.SystemClassLoaderAction
 186:             1             16  java.security.ProtectionDomain$Key
 187:             1             16  java.security.Policy$UnsupportedEmptyCollection
 188:             1             16  java.util.HashMap$EntrySet
 189:             1             16  sun.security.action.GetBooleanAction
 190:             1             16  java.io.FilePermissionCollection
 191:             1             16  [Ljava.lang.StackTraceElement;
 192:             2             16  sun.net.www.protocol.jar.Handler
 193:             1             16  java.util.regex.Pattern$5
 194:             1             16  java.util.regex.Pattern$Start
 195:             1             16  java.util.regex.Pattern$Single
 196:             1             16  java.util.concurrent.atomic.AtomicInteger
 197:             1             16  java.util.regex.Pattern$Node
 198:             1             16  sun.misc.Launcher
 199:             1             16  sun.misc.URLClassPath$FileLoader
 200:             1             16  java.util.regex.Pattern$LastNode
 201:             1             16  java.util.HashMap$KeySet
 202:             1             16  java.util.Collections$EmptyMap
 203:             1             16  [Ljava.security.cert.Certificate;
 204:             1             16  java.nio.charset.CoderResult$1
 205:             1             16  java.lang.ProcessEnvironment$CheckedEntrySet
 206:             1             16  java.util.Collections$EmptyList
 207:             1             16  java.nio.charset.CoderResult$2
 208:             1             16  java.net.Inet6AddressImpl
 209:             1             16  sun.jkernel.DownloadManager$1
 210:             1             16  java.net.Inet4AddressImpl
 211:             1             16  [Ljava.security.ProtectionDomain;
 212:             1             16  java.lang.ProcessEnvironment$CheckedEntrySet$1
 213:             1              8  sun.net.www.protocol.file.Handler
 214:             1              8  java.net.InetAddress$1
 215:             1              8  sun.misc.Unsafe
 216:             1              8  java.util.Collections$EmptySet
 217:             1              8  java.net.InetAddressImplFactory
 218:             1              8  java.lang.ref.Reference$Lock
 219:             1              8  java.util.Collections$ReverseComparator
 220:             1              8  sun.net.InetAddressCachePolicy$2
 221:             1              8  sun.misc.Launcher$Factory
 222:             1              8  sun.jkernel.DownloadManager$2
 223:             1              8  java.lang.ProcessEnvironment$NameComparator
 224:             1              8  java.lang.ProcessEnvironment$EntryComparator
 225:             1              8  java.util.Hashtable$EmptyEnumerator
 226:             1              8  java.lang.Compiler$1
 227:             1              8  java.lang.Terminator$1
 228:             1              8  java.nio.charset.Charset$3
 229:             1              8  java.lang.System$2
 230:             1              8  java.lang.Runtime
 231:             1              8  java.net.UnknownContentHandler
 232:             1              8  sun.misc.ASCIICaseInsensitiveComparator
 233:             1              8  java.net.URLClassLoader$7
 234:             1              8  java.lang.reflect.ReflectAccess
 235:             1              8  java.security.ProtectionDomain$2
 236:             1              8  sun.reflect.ReflectionFactory
 237:             1              8  sun.net.InetAddressCachePolicy$1
 238:             1              8  java.util.Hashtable$EmptyIterator
 239:             1              8  java.security.Security$1
 240:             1              8  java.lang.String$CaseInsensitiveComparator
Total          7599         899640
now i :3
now i :4
now i :5
now i :6
now i :7
now i :8
now i :9

相关链接:

http://blog.csdn.net/fenglibing/article/details/6411953

http://blog.csdn.net/zhaozheng7758/article/details/8623530

时间: 2024-10-10 16:57:23

【深入JVM】JVM工具之JMAP的相关文章

【十一】jvm 性能调优工具之 jmap

jvm 性能调优工具之 jmap 概述 命令jmap是一个多功能的命令.它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息.查看 ClassLoader 的信息以及 finalizer 队列. jmap 用法 参数: option: 选项参数. pid: 需要打印配置信息的进程ID. executable: 产生核心dump的Java可执行文件. core: 需要打印配置信息的核心文件. server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,

[转]JVM系列五:JVM监测&amp;工具[整理中]

原文地址:http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案.正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并不断进行调整才能找到最佳设置方案.本文将介绍如果通过工具及Java api来监测JVM的运行状态,并详细介绍各工具的使用方法. 需要监测的数据:(内存使用情况 谁

JVM监测&amp;工具[转]

通过工具及Java api来监测JVM的运行状态, 需要监测的数据:(内存使用情况 谁使用了内存 GC的状况) 内存使用情况--heap&PermGen @ 表示通过jmap –heap pid 可以获取的值 # 表示通过jstat –gcutil pid 可以获取的值 参数的查看可以通过多种方法 本文中只随机列出一种. 描述 最大值 当前值 报警值 堆内存 @Heap Configuration::MaxHeapSizesum(eden+servivor+old) sum(eden+servi

【转】深入理解JVM—JVM内存模型

http://www.cnblogs.com/dingyingsi/p/3760447.html#3497199 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变

深入理解JVM—JVM内存模型

原文地址:http://www.lofter.com/app/QRCodedownload?act=qbbkdlxz_20150313_13 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因

(转)深入理解JVM—JVM内存模型

原文地址:http://www.cnblogs.com/dingyingsi/p/3760447.html 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下

JVM | JVM的核心技术

说到JVM,很多工作多年的老铁,可能就有点发憷了,因为搬砖多年,一直使用java这个工具,对于JVM没有了解过,有句话面试造航母,上班拧螺丝,要啥自行车啊,知道如何搬砖就可以了,为啥要懂这么多,如果你有很强的商业头脑,不需要了解太多深入的东西,只要完成业务功能就可以了,如果你口才也不行,只有一个编程的大脑,老铁沉下心咱们一起了解下,你平常拧螺丝的扳手的结构把,这个真心有用.因为它可以让你走的更远,挣的更多! JVM JVM一些概念 什么是JVM JVM是Java Virtual Machine(

java自带的jvm分析工具

http://domark.iteye.com/blog/1924302 这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈. 1.jps 类似ps -ef|grep java 显示java进程号 或者pgrep java2.jstack 打印jvm内存的堆栈信息,打印出来的结果类似 2010-04-21 20:10:51 Full thread du

Jvm内存工具

1,JConsole  位于 [JDK] bin 下, 2,代码查看当前进程堆内存 long maxMemory = Runtime.getRuntime().maxMemory();long totalMemory = Runtime.getRuntime().totalMemory();long freeMemory = Runtime.getRuntime().freeMemory(); System.out.println(maxMemory);System.out.println(to