javap是jdk自带的反编译工具,可以通过控制台查看字节码文件内容
javap -v 字节码文件
idea可以安装这个插件,直接在插件市场就能搜索到,安装完成后,选中class文件,点击view,就可以看到对应选项
官网文档https://arthas.aliyun.com/
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率
下载地址https://arthas.aliyun.com/arthas-boot.jar
git指定版本下载地址Releases · alibaba/arthas (github.com)
编写如下代码并运行
public class HelloWorld {
public static void main(String[] args){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
});
thread.start();
}
}
下载后java -jar启动arthas,就能看到运行得代码
输入对应的编号,我的是2,然后回车就能进入对应的线程
arthsa命令列表命令列表 | arthas (aliyun.com)
当前系统的实时数据面板
eg: dashboard -i 2000 -n 3
间隔两秒一次,输出三次
dump 已加载类的 bytecode 到特定目录
eg:dump -d D:/ HelloWorld 将HelloWorld得类的字节码信息导入到D盘根目录下
查看对应目录
反编译指定已加载类的源码
eg:jad HelloWorld
JHSDB(Java HotSpot Diagnostic and Debugging tool)是Java Development Kit (JDK) 9及更高版本中引入的一个诊断和调试工具。它用于在运行时分析Java应用程序,可以附加到正在运行的Java进程或核心转储文件以进行后事调试。JHSDB结合了之前多个独立工具的功能,比如jdb、jmap、jinfo、jstack等,提供了一个统一的界面来进行更深入的诊断和故障排查。
主要功能包括:
使用JHSDB的基本步骤:
jhsdb
命令行工具启动。attach
命令附加到正在运行的Java进程,可以通过进程ID或进程名指定。下面编写一个类内容如下,并启动运行
public class HsdbDemo {
public static final int i=0;
public static void main(String[] args) throws IOException {
new HsdbDemo();
System.in.read();
}
}
然后启动jdk得bin目录下的sa-jdi.jar,我的jdk版本是java11,java11取消了这个jar,用jhsdb做了替代,执行jhsdb hsdb
启动后我们需要连接到指定得进程,这里需要一个进程id,这个进程id通过jps命令可以查看
输入对应线程id就可以了
然后查看对象直方图
搜索到对应对象
双击进入,然后查看详细信息