JVM工作原理与实战(四):字节码常用工具

专栏导航

JVM工作原理与实战

RabbitMQ入门指南

从零开始了解大数据


目录

专栏导航

前言

一、javap命令

1.javap

[2.javap -version](#2.javap -version)

[3.javap -v](#3.javap -v)

二、jclasslib

三、Arthas

1.介绍

2.下载和使用

3.常用命令

总结


前言

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了字节码常用工具javap、jclasslib、Arthas等内容。


一、javap命令

javap是JDK自带的反编译工具,它允许开发者从命令行界面查看Java字节码文件(即.class文件)的内容。这一功能在分析Java类文件、理解Java虚拟机(JVM)如何处理代码以及进行故障排查时特别有用,尤其是在没有图形用户界面的服务器环境中(Linux和Windows命令相同)。

1.javap

输入javap查看所有参数:

bash 复制代码
javap

执行结果:

参数解释:

|-------------------------|-----------------------------------|
| -help --help -? | 输出此用法消息 |
| -version | 版本信息 |
| -v -verbose | 输出附加信息 |
| -l | 输出行号和本地变量表 |
| -public | 仅显示公共类和成员 |
| -protected | 显示受保护的/公共类和成员 |
| -package | 显示程序包/受保护的/公共类和成员 (默认) |
| -p -private | 显示所有类和成员 |
| -c | 对代码进行反汇编 |
| -s | 输出内部类型签名 |
| -sysinfo | 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5散列) |
| -constants | 显示最终常量 |
| -classpath <path> | 指定查找用户类文件的位置 |
| -cp <path> | 指定查找用户类文件的位置 |
| -bootclasspath <path> | 覆盖引导类文件的位置 |

2.javap -version

输入javap -version查看版本信息:

bash 复制代码
javap -version

执行结果:

3.javap -v

输入javap -v 字节码文件名称查看具体的字节码信息(jar包需要先使用 jar --xvf 命令解压):

bash 复制代码
javap -v 字节码文件名称

使用jar --xvf解压文件:

bash 复制代码
jar --xvf 字节码文件名称

执行结果:

输入javap -v 查看具体的字节码信息:

bash 复制代码
javap -v D:\Test\BOOT-INF\classes\com\rye\service\BlogService.class

执行结果:

通过javap -v 将具体的字节码信息转换为txt文本:

bash 复制代码
javap -v D:\Test\BOOT-INF\classes\com\rye\service\BlogService.class > D:\Test\BlobService.txt

执行结果:

二、jclasslib

jclasslib字节码编辑器是一款工具,它能够可视化已编译的Java类文件及其包含的字节码的所有细节。用户可以在其用户界面内编辑类文件的各个方面。除此之外,该工具还自带一个库,允许开发人员读取和写入Java类文件及字节码。使用此工具,所有常数池条目均可编辑,引用的常量池条目则可直接从属性与常量池条目的"编辑"按钮所弹出的上下文菜单中进行修改。同时,字节码指令也能通过上下文菜单进行编辑。

详细内容可以查看以下文章:

JVM工作原理与实战(二):字节码编辑器jclasslib-CSDN博客https://blog.csdn.net/jiangyq_/article/details/135303706

三、Arthas

1.介绍

Arthas是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

Arthas官方文档:

简介 | arthas (aliyun.com)https://arthas.aliyun.com/doc/

Arthas功能:

2.下载和使用

Arthas官方下载地址:

Releases · alibaba/arthas (github.com)https://github.com/alibaba/arthas/releases

下载arthas-bin.zip:

选择其中的arthas-boot.jar,放到相应的目录(根据个人情况选择):

在启动Arthas前需要先启动一个程序(被监控的程序):

bash 复制代码
java -jar blog-0.0.1-SNAPSHOT.jar

启动结果:

在arthas-boot.jar的目录下打开CMD输入命令启动Arthas:

bash 复制代码
java -jar arthas-boot.jar

启动结果,可以看到之前启动的程序(被监控的程序):

输入1,回车,监控该程序:

3.常用命令

Arthas官方命令文档:

命令列表 | arthas (aliyun.com)https://arthas.aliyun.com/doc/commands.html

dashboard:当前系统的实时数据面板,按 ctrl+c 退出。

参数名称 参数说明
[i:] 刷新实时数据的时间间隔 (ms),默认 5000ms
[n:] 刷新实时数据的次数

示例:

bash 复制代码
dashboard  -i 2000 -n 1

执行结果:

dump:dump 命令将 JVM 中实际运行的 class 的 byte code dump 到指定目录,适用场景批量下载指定包目录的 class 字节码 。

参数名称 参数说明
class-pattern 类名表达式匹配
[c:] 类所属 ClassLoader 的 hashcode
[classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
[d:] 设置类文件的目标目录
[E] 开启正则表达式匹配,默认为通配符匹配

示例:

bash 复制代码
dump -d D:/Test/test java.lang.String

执行结果:

jad:反编译指定已加载类的源码。jad命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于理解业务逻辑(在 Arthas Console 上,反编译出来的源码是带语法高亮的,阅读更方便)。

参数名称 参数说明
class-pattern 类名表达式匹配
[c:] 类所属 ClassLoader 的 hashcode
[classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name
[E] 开启正则表达式匹配,默认为通配符匹配

示例:

bash 复制代码
jad java.lang.String

执行结果:


总结

JVM是Java程序的运行环境,负责字节码解释、内存管理、安全保障、多线程支持、性能监控和跨平台运行。本文主要介绍了字节码常用工具javap、jclasslib、Arthas等内容,希望对大家有所帮助。

相关推荐
zyh_03052113 分钟前
GIN中间件
后端·golang·gin
aworkholic17 分钟前
opencv sdk for java中提示无stiching模块接口的问题
java·c++·opencv·jni·opencv4android·stiching
爱学习的白杨树22 分钟前
什么是MVCC?
java·服务器·数据库
hnmpf29 分钟前
flask-admin modelview 中重写get_query函数
后端·python·flask
it噩梦44 分钟前
深度分析 es multi_match 中most_fields、best_fields、cross_fields区别
java·elasticsearch
好看资源平台1 小时前
Java Web开发基础——Web应用的请求与响应机制
java
刘Java1 小时前
Dubbo 3.x源码(28)—Dubbo服务发布导出源码(7)应用级服务接口元数据发布
java·dubbo·dubbo源码
---wzy---1 小时前
我的JAVA-Web基础(2)
java·开发语言
小码编匠1 小时前
WPF 星空效果:创建逼真的宇宙背景
后端·c#·.net
逊嘘1 小时前
【Java数据结构】LinkedList
java·开发语言·数据结构