JVM监控及诊断工具命令行篇之jmap
目录
一、jmap:导出内存映像文件&内存使用情况
二、导出dump堆转储快照文件
三、显示堆内存相关信息
四、其它作用
五、小结
一、jmap:导出内存映像文件&内存使用情况
jmap(JVM Memory Map):一方面是获取dump文件(堆转储快照文件,二进制文件),还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。开发人员可以在控制台中输入命令“jmap -help”查阅jmap工具的具体使用方式和一些标准选项配置。
C:\Users\WSH>jmap -h
Usage:jmap [option] <pid>(to connect to running process)jmap [option] <executable <core>(to connect to a core file)jmap [option] [server_id@]<remote server IP or hostname>(to connect to remote debug server)where <option> is one of:<none> to print same info as Solaris pmap-heap to print java heap summary-histo[:live] to print histogram of java object heap; if the "live"suboption is specified, only count live objects-clstats to print class loader statistics-finalizerinfo to print information on objects awaiting finalization-dump:<dump-options> to dump java heap in hprof binary formatdump-options:live dump only live objects; if not specified,all objects in the heap are dumped.format=b binary formatfile=<file> dump heap to <file>Example: jmap -dump:live,format=b,file=heap.bin <pid>-F force. Use with -dump:<dump-options> <pid> or -histoto force a heap dump or histogram when <pid> does notrespond. The "live" suboption is not supportedin this mode.-h | -help to print this help message-J<flag> to pass <flag> directly to the runtime system
官方帮助文档:jmap
基本使用语法为:
- jmap [option] <pid>
- jmap [option] <executable <core>
- jmap [option] [server_id@] <remote server IP or hostname>
option参数说明如下:
选项 |
作用 |
-dump |
生成dump文件(Java堆转储快照),-dump:live只保存堆中的存活对象 |
-heap |
输出整个堆空间的详细信息,包括GC的使用、堆配置信息,以及内存的使用信息等 |
-histo |
输出堆空间中对象的统计信息,包括类、实例数量和合计容量,-histo:live只统计堆中的存活对象 |
-J <flag> |
传递参数给jmap启动的jvm |
-finalizerinfo |
显示在F-Queue中等待Finalizer线程执行finalize方法的对象,仅linux/solaris平台有效 |
-permstat |
以ClassLoader为统计口径输出永久代的内存状态信息,仅linux/solaris平台有效 |
-F |
当虚拟机进程对-dump选项没有任何响应时,强制执行生成dump文件,仅linux/solaris平台有效 |
说明:这些参数和linux下输入显示的命令多少会有不同,包括也受jdk版本的影响。
二、导出dump堆转储快照文件
dump堆转储快照文件主要有手动和自动两种方式:
【a】手动方式
手动dump出堆转储快照文件:如下两个选择其一即可
//dump出所有对象
> jmap -dump:format=b,file=<filename.hprof> <pid>
//只dump出存活对象(live)
> jmap -dump:live,format=b,file=<filename.hprof> <pid>
示例:
public class GCTest {public static void main(String[] args) throws ClassNotFoundException {List<byte[]> list = new ArrayList<>();for (int i = 0; i < 1000; i++) {byte[] arr = new byte[1024 * 100];list.add(arr);try {Thread.sleep(120);} catch (InterruptedException e) {e.printStackTrace();}}}
}
设置JVM参数并启动程序:
-Xms60m -Xmx60m -XX:SurvivorRatio=8
手动dump出堆转储快照文件:
C:\Users\WSH>jmap -dump:format=b,file=d:\1.hprof 14904
Dumping heap to D:\1.hprof ...
Heap dump file createdC:\Users\WSH>jmap -dump:format=b,file=d:\2.hprof 14904
Dumping heap to D:\2.hprof ...
Heap dump file createdC:\Users\WSH>jmap -dump:format=b,file=d:\3.hprof 14904
Dumping heap to D:\3.hprof ...
Heap dump file created##########只dump存活的对象###########
C:\Users\WSH>jmap -dump:live,format=b,file=d:\4.hprof 14904
Dumping heap to D:\4.hprof ...
Heap dump file created
如下图,即为生成的堆转储快照文件,可借助一些可视化分析工具打开,后面我们会介绍。
【b】自动方式
- -XX:+HeapDumpOnOutOfMemoryError:在堆溢出的时候可以储存快照;
- -XX:HeapDumpPath=d:/dumps/:导出内存快照时保存的路径;
在启动程序的时候指定上述两个参数即可,如下图:
三、显示堆内存相关信息
【a】jmap -heap 928:查看堆各区域的使用情况
C:\Users\WSH>jmap -heap 928
Attaching to process ID 928, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.291-b10using thread-local object allocation.
Parallel GC with 10 thread(s)Heap Configuration:MinHeapFreeRatio = 0MaxHeapFreeRatio = 100MaxHeapSize = 62914560 (60.0MB)NewSize = 20971520 (20.0MB)MaxNewSize = 20971520 (20.0MB)OldSize = 41943040 (40.0MB)NewRatio = 2SurvivorRatio = 8MetaspaceSize = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize = 17592186044415 MBG1HeapRegionSize = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 15728640 (15.0MB)used = 1623088 (1.5478973388671875MB)free = 14105552 (13.452102661132812MB)10.319315592447916% used
From Space:capacity = 2621440 (2.5MB)used = 2589008 (2.4690704345703125MB)free = 32432 (0.0309295654296875MB)98.7628173828125% used
To Space:capacity = 2621440 (2.5MB)used = 0 (0.0MB)free = 2621440 (2.5MB)0.0% used
PS Old Generationcapacity = 41943040 (40.0MB)used = 10146216 (9.676185607910156MB)free = 31796824 (30.323814392089844MB)24.19046401977539% used3182 interned Strings occupying 260960 bytes.
【b】jmap -histo 928:查看实例柱数状图
C:\Users\WSH>jmap -histo 928num #instances #bytes class name
----------------------------------------------1: 775 31478280 [B2: 5082 526064 [C3: 169 418184 [I4: 4933 118392 java.lang.String5: 717 82248 java.lang.Class6: 681 47240 [Ljava.lang.Object;7: 791 31640 java.util.TreeMap$Entry8: 720 28800 java.util.LinkedHashMap$Entry9: 427 18984 [Ljava.lang.String;10: 521 16672 java.util.HashMap$Node11: 179 11456 java.net.URL12: 26 10720 [Ljava.util.HashMap$Node;13: 113 8136 java.lang.reflect.Field14: 211 5064 java.util.LinkedList$Node15: 52 4992 java.util.jar.JarFile$JarFileEntry16: 88 4928 sun.misc.URLClassPath$JarLoader17: 61 4880 [Ljava.util.WeakHashMap$Entry;18: 115 4600 java.lang.ref.Finalizer19: 110 4400 java.lang.ref.SoftReference20: 256 4096 java.lang.Integer21: 123 3936 java.util.Hashtable$Entry22: 58 3712 java.util.jar.JarFile23: 111 3552 java.util.concurrent.ConcurrentHashMap$Node24: 107 3424 java.util.LinkedList25: 61 3416 sun.nio.cs.UTF_8$Encoder26: 133 3192 java.io.ExpiringCache$Entry27: 8 3008 java.lang.Thread28: 61 2928 java.util.WeakHashMap29: 48 2304 java.util.zip.Inflater30: 56 2240 sun.nio.cs.UTF_8$Decoder31: 68 2176 java.lang.ref.ReferenceQueue32: 26 2080 java.lang.reflect.Constructor33: 16 2048 [Ljava.util.concurrent.ConcurrentHashMap$Node;34: 39 1872 sun.util.locale.LocaleObjectCache$CacheEntry35: 58 1856 java.util.zip.ZipCoder36: 36 1728 java.util.HashMap37: 1 1568 [[B38: 37 1480 java.io.ObjectStreamField39: 26 1456 java.lang.Class$ReflectionData40: 89 1424 java.lang.Object41: 58 1392 java.util.ArrayDeque42: 20 1280 java.util.concurrent.ConcurrentHashMap43: 9 1184 [Ljava.util.Hashtable$Entry;44: 48 1152 java.util.zip.ZStreamRef45: 70 1120 java.lang.ref.ReferenceQueue$Lock46: 2 1064 [Ljava.lang.invoke.MethodHandle;47: 1 1040 [Ljava.lang.Integer;48: 1 1040 [[C49: 19 760 sun.util.locale.BaseLocale$Key50: 11 648 [Ljava.lang.reflect.Field;51: 8 640 [S52: 19 608 java.io.File53: 19 608 java.util.Locale54: 19 608 sun.util.locale.BaseLocale55: 13 520 java.security.AccessControlContext56: 21 504 java.util.jar.Attributes$Name57: 19 456 java.util.Locale$LocaleKey58: 18 432 sun.misc.MetaIndex59: 13 392 [Ljava.io.ObjectStreamField;60: 1 384 com.intellij.rt.execution.application.AppMainV2$161: 1 384 java.lang.ref.Finalizer$FinalizerThread62: 6 384 java.nio.DirectByteBuffer63: 1 376 java.lang.ref.Reference$ReferenceHandler64: 18 352 [Ljava.lang.Class;65: 6 336 java.nio.DirectLongBufferU66: 10 320 java.lang.OutOfMemoryError67: 3 312 [D68: 2 312 [J69: 13 312 [Ljava.lang.reflect.Constructor;70: 13 312 sun.reflect.NativeConstructorAccessorImpl71: 12 288 java.util.ArrayList72: 5 280 sun.util.calendar.ZoneInfo73: 3 264 java.lang.reflect.Method74: 11 264 java.net.StandardSocketOptions$StdSocketOption75: 8 256 java.util.Vector76: 3 240 [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;77: 5 240 java.util.Hashtable78: 7 224 java.lang.ThreadLocal$ThreadLocalMap$Entry79: 4 224 java.util.LinkedHashMap80: 13 208 sun.reflect.DelegatingConstructorAccessorImpl81: 5 200 java.security.ProtectionDomain82: 5 200 java.util.WeakHashMap$Entry83: 6 192 java.nio.file.attribute.FileTime84: 4 192 java.util.Properties85: 4 192 java.util.TreeMap86: 2 160 [[Ljava.lang.String;87: 4 160 java.io.FileDescriptor88: 4 160 java.lang.ClassLoader$NativeLibrary89: 5 160 java.security.CodeSource90: 5 160 sun.util.locale.provider.LocaleProviderAdapter$Type91: 3 144 java.nio.HeapByteBuffer92: 6 144 sun.misc.PerfCounter93: 3 144 sun.misc.URLClassPath94: 2 128 java.io.ExpiringCache$195: 4 128 java.util.Stack96: 2 128 sun.nio.cs.ext.DoubleByte$Encoder97: 1 120 java.net.SocksSocketImpl98: 5 120 java.util.Collections$UnmodifiableRandomAccessList99: 5 120 sun.misc.FloatingDecimal$PreparedASCIIToBinaryBuffer100: 2 112 java.lang.Package101: 7 112 java.util.HashSet102: 2 112 java.util.ResourceBundle$CacheKey103: 2 112 sun.nio.cs.ext.DoubleByte$Decoder104: 4 96 java.lang.RuntimePermission105: 3 96 java.lang.StringCoding$StringEncoder106: 2 96 java.lang.ThreadGroup107: 6 96 java.lang.ThreadLocal108: 1 96 java.net.DualStackPlainSocketImpl109: 2 96 java.util.ResourceBundle$BundleReference110: 4 96 jdk.net.ExtendedSocketOptions$ExtSocketOption111: 1 96 sun.misc.Launcher$AppClassLoader112: 3 96 sun.net.spi.DefaultProxySelector$NonProxyInfo113: 2 96 sun.nio.cs.StreamEncoder114: 1 88 sun.misc.Launcher$ExtClassLoader115: 5 80 [Ljava.security.Principal;116: 2 80 java.io.BufferedWriter117: 2 80 java.io.ExpiringCache118: 5 80 java.security.ProtectionDomain$Key119: 2 80 sun.misc.FloatingDecimal$BinaryToASCIIBuffer120: 3 72 java.lang.ThreadLocal$ThreadLocalMap121: 3 72 java.net.Proxy$Type122: 3 72 java.util.Arrays$ArrayList123: 1 72 java.util.ResourceBundle$RBClassLoader124: 3 72 java.util.concurrent.atomic.AtomicLong125: 3 72 sun.misc.FloatingDecimal$ExceptionalBinaryToASCIIBuffer126: 1 72 sun.util.locale.provider.JRELocaleProviderAdapter127: 1 64 [F128: 2 64 [Ljava.lang.Thread;129: 2 64 java.io.FileOutputStream130: 2 64 java.io.FilePermission131: 2 64 java.io.PrintStream132: 2 64 java.lang.ClassValue$Entry133: 2 64 java.lang.StringCoding$StringDecoder134: 2 64 java.lang.VirtualMachineError135: 2 64 java.lang.ref.ReferenceQueue$Null136: 2 64 java.lang.ref.WeakReference137: 2 64 java.security.BasicPermissionCollection138: 2 64 java.security.Permissions139: 2 64 java.util.ResourceBundle$LoaderReference140: 2 48 [Ljava.lang.reflect.Method;141: 1 48 [Ljava.util.concurrent.TimeUnit;142: 2 48 java.io.BufferedOutputStream143: 1 48 java.io.BufferedReader144: 2 48 java.io.File$PathStatus145: 2 48 java.io.FilePermissionCollection146: 2 48 java.io.OutputStreamWriter147: 2 48 java.net.InetAddress$Cache148: 2 48 java.net.InetAddress$Cache$Type149: 1 48 java.net.SocketInputStream150: 1 48 java.nio.HeapCharBuffer151: 2 48 java.nio.charset.CoderResult152: 3 48 java.nio.charset.CodingErrorAction153: 3 48 java.util.Collections$UnmodifiableSet154: 3 48 java.util.HashMap$KeySet155: 2 48 sun.misc.JarIndex156: 2 48 sun.misc.NativeSignalHandler157: 2 48 sun.misc.Signal158: 3 48 sun.net.www.protocol.jar.Handler159: 1 48 sun.nio.cs.StreamDecoder160: 1 48 sun.nio.cs.US_ASCII$Decoder161: 1 48 sun.util.locale.provider.LocaleResources$ResourceReference162: 1 48 sun.util.resources.TimeZoneNames163: 1 48 sun.util.resources.en.TimeZoneNames_en164: 1 40 [Lsun.util.locale.provider.LocaleProviderAdapter$Type;165: 1 40 java.io.BufferedInputStream166: 1 40 java.util.ResourceBundle$1167: 1 40 sun.nio.cs.StandardCharsets$Aliases168: 1 40 sun.nio.cs.StandardCharsets$Cache169: 1 40 sun.nio.cs.StandardCharsets$Classes170: 1 40 sun.nio.cs.ext.ExtendedCharsets171: 1 32 [Ljava.lang.OutOfMemoryError;172: 2 32 [Ljava.lang.StackTraceElement;173: 1 32 [Ljava.lang.ThreadGroup;174: 1 32 [Ljava.net.Proxy$Type;175: 1 32 java.io.FileInputStream176: 1 32 java.io.WinNTFileSystem177: 1 32 java.lang.ArithmeticException178: 2 32 java.lang.Boolean179: 1 32 java.lang.NullPointerException180: 1 32 java.net.InetAddress$InetAddressHolder181: 1 32 java.net.Socket182: 2 32 java.nio.ByteOrder183: 2 32 java.util.LinkedHashMap$LinkedKeySet184: 2 32 java.util.concurrent.atomic.AtomicInteger185: 1 32 java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl186: 1 32 jdk.net.ExtendedSocketOptions$1187: 1 32 sun.instrument.InstrumentationImpl188: 1 32 sun.nio.cs.StandardCharsets189: 1 32 sun.util.locale.provider.LocaleResources190: 1 32 sun.util.locale.provider.LocaleServiceProviderPool191: 1 24 [Ljava.io.File$PathStatus;192: 1 24 [Ljava.lang.ClassValue$Entry;193: 1 24 [Ljava.net.InetAddress$Cache$Type;194: 1 24 [Ljava.security.ProtectionDomain;195: 1 24 [Lsun.launcher.LauncherHelper;196: 1 24 java.io.InputStreamReader197: 1 24 java.lang.ClassValue$Version198: 1 24 java.lang.StringBuilder199: 1 24 java.lang.invoke.MethodHandleImpl$4200: 1 24 java.lang.reflect.ReflectPermission201: 1 24 java.net.Inet4Address202: 1 24 java.net.Inet6AddressImpl203: 1 24 java.net.Proxy204: 1 24 java.util.BitSet205: 1 24 java.util.Collections$EmptyMap206: 1 24 java.util.Collections$SetFromMap207: 1 24 java.util.Collections$SynchronizedSet208: 1 24 java.util.Locale$Cache209: 1 24 java.util.ResourceBundle$Control$CandidateListCache210: 1 24 java.util.concurrent.TimeUnit$1211: 1 24 java.util.concurrent.TimeUnit$2212: 1 24 java.util.concurrent.TimeUnit$3213: 1 24 java.util.concurrent.TimeUnit$4214: 1 24 java.util.concurrent.TimeUnit$5215: 1 24 java.util.concurrent.TimeUnit$6216: 1 24 java.util.concurrent.TimeUnit$7217: 1 24 java.util.jar.Manifest218: 1 24 sun.instrument.TransformerManager219: 1 24 sun.launcher.LauncherHelper220: 1 24 sun.misc.URLClassPath$FileLoader221: 1 24 sun.nio.cs.ISO_8859_1222: 1 24 sun.nio.cs.ThreadLocalCoders$1223: 1 24 sun.nio.cs.ThreadLocalCoders$2224: 1 24 sun.nio.cs.US_ASCII225: 1 24 sun.nio.cs.UTF_16226: 1 24 sun.nio.cs.UTF_16BE227: 1 24 sun.nio.cs.UTF_16LE228: 1 24 sun.nio.cs.UTF_8229: 1 24 sun.nio.cs.ext.GBK230: 1 24 sun.reflect.NativeMethodAccessorImpl231: 1 24 sun.util.locale.BaseLocale$Cache232: 1 24 sun.util.locale.provider.TimeZoneNameProviderImpl233: 1 16 [Ljava.lang.Throwable;234: 1 16 [Ljava.security.cert.Certificate;235: 1 16 [Lsun.instrument.TransformerManager$TransformerInfo;236: 1 16 java.io.FileDescriptor$1237: 1 16 java.lang.CharacterDataLatin1238: 1 16 java.lang.ClassValue$Identity239: 1 16 java.lang.Runtime240: 1 16 java.lang.String$CaseInsensitiveComparator241: 1 16 java.lang.System$2242: 1 16 java.lang.Terminator$1243: 1 16 java.lang.invoke.MemberName$Factory244: 1 16 java.lang.invoke.MethodHandleImpl$2245: 1 16 java.lang.invoke.MethodHandleImpl$3246: 1 16 java.lang.ref.Reference$1247: 1 16 java.lang.ref.Reference$Lock248: 1 16 java.lang.reflect.ReflectAccess249: 1 16 java.net.InetAddress$2250: 1 16 java.net.URLClassLoader$7251: 1 16 java.nio.Bits$1252: 1 16 java.nio.charset.CoderResult$1253: 1 16 java.nio.charset.CoderResult$2254: 1 16 java.security.ProtectionDomain$2255: 1 16 java.security.ProtectionDomain$JavaSecurityAccessImpl256: 1 16 java.util.Collections$EmptyIterator257: 1 16 java.util.Collections$EmptyList258: 1 16 java.util.Collections$EmptySet259: 1 16 java.util.Hashtable$EntrySet260: 1 16 java.util.ResourceBundle$Control261: 1 16 java.util.WeakHashMap$KeySet262: 1 16 java.util.concurrent.atomic.AtomicBoolean263: 1 16 java.util.jar.Attributes264: 1 16 java.util.jar.JavaUtilJarAccessImpl265: 1 16 java.util.zip.ZipFile$1266: 1 16 jdk.net.ExtendedSocketOptions$PlatformSocketOptions267: 1 16 sun.misc.ASCIICaseInsensitiveComparator268: 1 16 sun.misc.FloatingDecimal$1269: 1 16 sun.misc.Launcher270: 1 16 sun.misc.Launcher$Factory271: 1 16 sun.misc.Perf272: 1 16 sun.misc.Unsafe273: 1 16 sun.net.spi.DefaultProxySelector274: 1 16 sun.net.www.protocol.file.Handler275: 1 16 sun.reflect.DelegatingMethodAccessorImpl276: 1 16 sun.reflect.ReflectionFactory277: 1 16 sun.util.calendar.Gregorian278: 1 16 sun.util.locale.provider.AuxLocaleProviderAdapter$NullProvider279: 1 16 sun.util.locale.provider.SPILocaleProviderAdapter280: 1 16 sun.util.locale.provider.TimeZoneNameUtility$TimeZoneNameGetter281: 1 16 sun.util.resources.LocaleData282: 1 16 sun.util.resources.LocaleData$LocaleDataResourceBundleControl
Total 18064 32910960
四、其它作用
jmap -permstat 15144:查看系统的ClassLoader信息;
jmap -finalizerinfo 15144:查看堆积在finalizer队列中的对象;
注意,上述两个参数仅在linux/solaris平台有效。
五、小结
由于jmap将访问堆中的所有对象,为了保证在此过程中不被应用线程干扰,jmap需要借助安全点机制,让所有线程停留在不改变堆中数据的状态。也就是说,由jmap导出的堆快照必定是安全点位置的,这可能导致基于该堆快照的分析结果存在偏差。
举个例子,假设在编译生成的机器码中,某些对象的生命周期在两个安全点之间,那么:live选项将无法探知到这些对象。
另外,如果某个线程长时间无法跑到安全点,jmap将一直等下去。与前面讲的jstat则不同,垃圾回收器会主动将jstat所需要的摘要数据保存至固定位置,只需直接读取即可。
JVM监控及诊断工具命令行篇之jmap相关推荐
- JVM 学习笔记二十五、JVM监控及诊断工具-命令行篇
二十五.JVM监控及诊断工具-命令行篇 1.概述 性能诊断是软件工程师在日常工作中经常面对和解决的问题,在用户体验至上的今天,解决好应用软件的性能问题能带来非常大的收益. Java作为最流行的编程语言 ...
- 14、JVM监控及诊断工具-命令行篇
文章目录 第1章.概述 1.简单命令行工具 第2章.jps:查看正在运行的Java进程 1.基本情况 2.基本语法 [1]options参数 [2]hostid参数 第3章.jstat:查看JVM统计 ...
- JVM监控及诊断工具命令行篇之jps
目录 一.概述 二.jps:查看正在运行的Java进程 一.概述 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益. Java 作 ...
- JVM监控及诊断工具-命令行篇一
1 jps 基本概述 jps(java process status),用于查看正在运行的java虚拟机进程,会显示指定系统内所有的HotSpot虚拟机进程(查看虚拟机进程信息).这里说明一下,对于本 ...
- JVM学习笔记之-JVM性能监控-JVM监控及诊断工具-命令行方式
性能优化的步骤 第1步(发现问题):性能监控 一种以非强行或者入侵方式收集或查看应用运营性能数据的活动. 监控通常是指一种在生产.质量评估或者开发环境下实施的带有预防或主动性的活动. 当应用相关干系人 ...
- 尚硅谷JVM下篇:性能监控与调优篇_02_JVM监控及诊断工具-命令行篇
文章目录 1-概述 概述 简单命令行工具 2-jps:查看正在运行的Java进程 基本情况 基本语法: options参数 hostid参数 3-jstat:查看JVM统计信息 基本信息 基本语法 o ...
- JVM监控及诊断工具之GUI篇
目录 工具概述 图形化综合诊断工具 jConsole 基本概述 启动 三种连接方式 Visual VM 基本概述 插件的安装 连接方式 基本使用 eclipse MAT 基本概述 获取堆dump文件 ...
- 性能监控与调优篇之【3. JVM 监控及诊断工具-GUI 篇】
文章目录 3. JVM 监控及诊断工具-GUI 篇 3.1. 工具概述 3.2. JConsole 3.3. Visual VM 3.4. Eclipse MAT 3.5. JProfiler 3.6 ...
- JVM监控及诊断工具-GUI篇
3.JVM监控及诊断工具-GUI篇 一.工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系.各方 ...
- 20.JVM监控以及诊断工具-GUI篇
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 20. JVM监控及诊断工具-GUI篇 20.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相 ...
最新文章
- 四级嵌入式系统开发工程师-计算题题库
- 架构漫谈:我心中的架构
- ALV标准过滤功能失效
- 【存储知识学习】第十章- 存储架构演进过程《大话存储》阅读笔记
- CSS 盒子模型(Box model)中的 padding 与 margin
- 华尔街英语学习软件_华尔街英语核心课程功能升级 让学员学习之旅更高效
- .NET Core IdentityServer4实战 第Ⅳ章-集成密码登陆模式
- JVM体系结构与工作方式
- 特斯拉将美国政府告了:要求停止对华关税并退款!
- jquery城市选择案例
- 如何设置电脑自动锁屏_MIUI第415期:新增智能显示锁屏通知、状态栏数字电量外显...
- Win11怎么关闭开机自启动软件
- golang实现人民币小写转大写
- Sequence contains more than one matching element
- 第144章 SQL函数 TO_DATE(二)
- 这就是爱,说也说不清楚
- Android APN设置 获取APN列表
- 利用matlab绘制系统开环幅频渐进特性曲线(附详细注释)
- python展示两幅图_Tkinter,并排显示两幅图像
- SRPG Studio 教程(一) 创建游戏及引用素材
热门文章
- 多模块顺序_广东省考行测时间如何分配?答题顺序的建议?
- 自动驾驶 6-1: 横向车辆控制介绍 Lesson 1: Introduction to Lateral Vehicle Control
- TensorFlow by Google CNN卷积神经网络 Machine Learning Foundations: Ep #3 - Convolutions and pooling
- ndarray负值统一置0,正数不变
- php soapclient 超时,PHP SoapClient超时
- cacheable中的condition和unless
- hdu acm 1010
- Hadoop2.4.1(QJM HA)+HBASE0.98 双MASTER问题分析
- 在linux centos中加入中文输入法
- 均匀带电直线外一点的场强