获取Java运行时增强类的class内容

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29493353/article/details/86609817

1.dumpclass
dumpclass这个小工具做了一些增强,更加方便地使用。

支持? *的匹配
支持多个ClassLoader加载了同名类的情况。
比如多个classloader加载了多份的logger,如果不做区分,则dump出来时会被覆盖掉,也分析不出问题。

dumpclass可以在maven仓库里下载到: 
http://search.maven.org/#search%7Cga%7C1%7Cdumpclass

dumpclass的用法很简单,比如:

Usage:
 pattern                  : class name wildcard match pattern
 --noStat                 : do not print dump stat (default: false)
 --sensitive              : class name wildcard match sensitive. In mac os, try
                            this option. (default: false)
 -c (--classLoaderPrefix) : classLoaderPrefix (default: false)
 -o (--outputDir) VAL     : outputDir
 -p (--pid) N             : pid

Example:
  java -jar dumpclass.jar -p 4345 *StringUtils
  java -jar dumpclass.jar -p 4345 -o /tmp/dump *StringUtils
  java -jar dumpclass.jar -p 4345 -o /tmp/dump --classLoaderPrefix  *StringUtils

对于多个ClassLoader的情况,可以使用--classLoaderPrefix,这样子在输出.class文件时,会为每一个ClasssLoader创建一个目录,比如:sun.jvm.hotspot.oops.Instance@955d26b8。并且会在目录下放一个classLoader.text文件,里面是ClassLoader.toString()的内容,方便查看具体ClassLoader是什么。

2.HSDB

启动

java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB

然后输入pid之后,点击tool

然后可以看运行是的字节码 和stack信息 运行时常量池之类的数据。 

猜你喜欢

转载自blog.csdn.net/qq_29493353/article/details/86609817