Arthas-Class/Classloader相关命令使用

article/2024/7/17 22:25:19

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。

开头:
我们先说下生产使用频率较高的有哪些:dump、jad、mc、retransform

文章目录

  • Class/Classloader相关命令使用
    • classloader
    • dump
    • jad
    • mc
    • redefine
    • retransform
    • sc
    • sm

Class/Classloader相关命令使用

classloader

查看 classloader 的继承树,urls,类加载信息,将 JVM 中所有的 classloader 的信息统计出来,并可以展示继承树,urls 等。这个命令用的不多,了解一下。

命令:
classloader 按类加载类型查看统计信息
classloader -l 按类加载实例进行统计
classloader -t 按类加载实例进行统计
classloader -c [hashcode] ClassLoader 的 hashcode
classloader -c [hashcode] --load [类名] 使用 ClassLoader 去加载类
classloader -c [hashcode] -r [资源名] 用 ClassLoader 去查找 resource

在这里插入图片描述

dump

dump 已加载类的 bytecode 到特定目录,这个命令比较常用,主要用来下载/打印出来 class 文件。

常用命令:
dump -d [目录] [类的全限定名]

使用截图:

在这里插入图片描述

jad

反编译指定已加载类的源码,这个命令也比较常用,主要用来反编译 class 文件,确定我们写的代码是不是编译了,是否生效。

命令:
jad -c [hashcode]
jad [类的全限定名] --lineNumber false 反编译类,不限行号, --lineNumber false 可选的。
在这里插入图片描述

mc

Memory Compiler/内存编译器,编译.java文件生成.class。这个命令也比较常用,主要用来线上修改代码后,编译发布。
我们用 jad 拿到源码,然后保存修改它,在用 mc 编译。

命令:
mc -d [目录] -c [hashcode] [目录/xxx.java]
也可以参考:mc -d /root/test --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader /root/test/Test.java

有时候没指定 classloader,也会报错,如下:
在这里插入图片描述

使用截图如下:
在这里插入图片描述

redefine

加载外部的.class文件,redefine jvm 已加载的类,不过官方已经推荐使用 retransform 了。
这个了解就好了。
命令:
redefine -c [hashcode] [class文件]
redefine --classLoaderClass [classLoader] [class文件]

在这里插入图片描述

retransform

加载外部的.class文件,retransform jvm 已加载的类。官方推荐使用的方式。

命令:
retransform [class文件] 将 class 加载到 jvm
retransform -l 查看 retransform entry
retransform -d [id] 删除指定 retransform entry
retransform --deleteAll 删除指定 retransform entry

在这里插入图片描述

sc

这个是 Search-Class 的缩写, 查看 JVM 已加载的类信息。
命令:
sc -d [类的全限定名]
sc -d -f [类的全限定名] 打印出类的 Field 信息
sc -cs [返回值] [类名包含] 指定 class 的 ClassLoader#toString() 返回值

在这里插入图片描述

sm

查看已加载类的方法信息,是 Search-Method 的简写。

命令:
主要命令: sm -d [类的全限定名]

在这里插入图片描述


http://www.ngui.cc/article/show-1200653.html

相关文章

Django框架:优缺点、实用场景及与Flask、FastAPI的对比

Django是一个使用Python语言编写的高级Web框架,它提供了快速开发、可重用和可维护的Web应用程序所需的一切组件。在本文中,我们将探讨Django的get和post请求、优缺点、实用场景以及与Flask、FastAPI的对比。 Django的get和post请求 在Django中&#xff0…

leetcode95--不同的二叉搜索树 II(java)

不同的二叉搜索树 II leetcode95 -- 不同的二叉搜索树 II题目描述 解题思路代码演示二叉树专题 leetcode95 – 不同的二叉搜索树 II 原题链接: https://leetcode.cn/problems/unique-binary-search-trees-ii/ 题目描述 给你一个整数 n ,请你生成并返回所有由 n 个节…

1036 Boys vs Girls(38行代码)

分数 25 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 This time you are asked to tell the difference between the lowest grade of all the male students and the highest grade of all the female students. Input Specification: Each input file contai…

Task 异步编程教程

系列文章目录 Task 异步编程教程 系列文章目录前言常见的用法: Task 异步编程教程目录1. 异步编程基础1.1 异步操作的概念和优势1.2 使用 async 和 await 关键字定义异步方法1.3 异步方法的返回类型和特点 2. Task 类的基础2.1 Task 类的构造方法和静态方法2.2 Task…

Linux :: 【基础指令篇 :: 文件内容操作:(4)】:: head / tail 指令 :: 指定查看文件的部分内容 | 查看前 n 行内容

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 注&#xff…

Java学习路线(21)——网络通信

一、网络通信三件套 1、IP地址: 设备在网络中的地址,唯一标识 概念: Internet Protocal,简称为IP,全称“互联网协议地址”。 常见分类: IPv4(32位) 和 IPv6(128位&#…

从零开始的力扣刷题记录-第四十六天

力扣每日四题 507. 完美数-简单661. 图片平滑器-简单1652. 拆炸弹-简单1156. 单字符重复子串的最大长度-中等总结 507. 完美数-简单 题目描述: 对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。 给定…

== 和 equals 的区别是什么?

解读 对于基本类型和引用类型 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同; 代码示例: String x "string"; String y "st…

推进印度制造受挫,苹果仍踢出13家中国企业,一条道走到黑?

苹果公布了2022年的供应商名单,让人惊讶的是苹果将13家中国供应商踢出了供应链,而美国、日本的供应商却有所增加,似乎苹果仍然在降低对中国制造的依赖,这对于苹果来说未必是好事。 一、苹果的印度制造计划受挫 数年前苹果推动印度…

这么好看的头像,岂不拿下!

❝ 如此好看的头像,怎么能不喜欢??? ❞ 代码放在了最后 后续还会出一个工具,以便于随时打开下载。 看上述的头像是不是还是很不错的。看着网站还是✨✨每天都会有更新的✨✨。 所以,我动手了,下…