class 和 Classloader 相关命令:dump | 学习笔记

简介: 快速学习 class 和 Classloader 相关命令:dump

开发者学堂课程【线上问题排查利器 Alibaba Arthas(下)class 和 Classloader 相关命令:dump】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/747/detail/13199


class 和 Classloader 相关命令:dump


内容介绍

一、dump作用及参数

二、举例运算

三、小节


一、作用及参数

接下来介绍第一条命令,与类相关的,dump 这个词翻译过来就是仓库的意思,意思则是,把现在运行的类进行进一步的储存,存在本地硬盘.

作用是将已加载类的字节码文件保存到特定目录:logs/arthas/classdump/实际上指将现在运行的类,将文件提取出来,存到本地的硬盘上面

之后就可以在这个目录下找到文件

参数

数名称

参数说明

class-pattem

类名表达式匹配

[c:]

可以指定类所属ClassLoader的hashcode

[E]              

[A]开启正则表达式匹配,默认为通配符匹配

很多命令都使用[E]来进行匹配表达


二、举两个例子来说明存储问题

1.假设 Java,按string类,首先可以把它的字节码文件给它存下来。那可以先看一下一个目录,显示log时候,先进到log路线。然后里面有个class,那这时候把这里面的一些东西全部删了,先不要使文件里不要有任何的东西。

image.png

把这两步给它给删掉,这个目录现在空了,过一分钟就又会有新的东西出来。现在想把 java 给删掉,字节码文件提取出来,保存在刚刚的那个目录下面。显示如下

image.png

保存的路径在这个目录,那就是刚刚删掉的一个文件夹下面。现在就可以在这边来看一下,显示java,那再进到java里面。在这时就可以看到这个简化了,这个class文件提取出来放在这个地方了,还获取到了码文件。

再回到上面,就会了解,在加法当中,这个包其实就是文件夹,所以它是由三级目录组成。

此时便是需要的文件夹

把 String 类的字节码文件保存到-/logs/arthas/classdmp/目录下

dump Java.lang.String

把demo包下所有的类的字节码文件保存到-/1ogs/arthas/classdunp/目录下

dump demo.

首先先进到logs 盘然后就能实行Java string的运算

代码运算结果如下

Last login:Fri Har 20 14:28:43 2020 froe 192.168.254.1

[root@heima~]# cd.arthas/lib/3.1.7/arthas/

[root@heima arthas]#cd        1

[root@heina-]# 1s

anaconda-ks.cfg arthas-output               bbb  Hello.class logs         mydate.log HyToncat.java

arthas-boot.jar arthas-packaging-3.1.7-bin.zip deno Hello.java RathGare.java my-demo.jor

root@heima ~]# cd logs/

root@heima logs]# 1s

rthas arthas-cache

[root@heima logs]# cd arthas

[root@heima arthas]# 1s

arthas.log arthas.log.2020-03-19.0 classdunp

[root@heima arthas]# cd classdump

[root@heima classdump]# 1s

把代码存在刚刚的目录下面

此时,便可以显示classloader 的字样

保存的路径可

2.运行新的 Java。

可以用stick。如果使用通配符的话,这就意味着可以取这个包下面所有的类。那有时候有些包里面类特别多,这时就可以用通配符一次性的去除所有的类文件,这个就比较容易。此时,就比较清晰的可以看到,那加载器以及内加载器是哪一个?提取出来以后放在哪个目录下面呢?建一个类加载器为名字的。这就是一个文件夹,然后一个短横,后面会建立起新的文件夹。

root@heina classdunp]# 1s

java

[raot@heima classdunp]= ed java

[root@heima java]: is

lang

[root@heima java]" cd lang/

[root@heima lang)= is

string.class

[root@heima lang]" cd..

root@heina java)= cd ..

[root@heina classdump]# 1s

Java

[root@heima classdump]= |

此时的类清晰可见


三、小节

通过上面两个例子,可以了解到dump的作用,此时通过 dump 可以了解更多

dump 作用:将正在 JVM 空运行的程序的字节码文件提取出来,保存在 logs 相应的目录下,不同的类加载器放在不同的目录下。

相关文章
|
6月前
|
存储 Oracle Java
JVM中Class文件结构详解
JVM中Class文件结构详解
137 0
|
3月前
|
前端开发 Java 编译器
classpath中存在多个jar存在同限定名的class classloader会如何加载
总之,合理组织类路径和使用现代化的构建工具,可有效避免类加载冲突,保证应用的稳定运行。
126 8
|
6月前
|
移动开发 安全 数据安全/隐私保护
class dump使用方式和原理
class dump使用方式和原理
39 0
|
11月前
|
移动开发 安全 数据安全/隐私保护
class dump使用方式和原理
导出的包是经过混淆,经过加固比较安全的包了
|
存储 安全 前端开发
jvm之.class文件解读(上)
jvm之.class文件解读(上)
|
存储 Java 编译器
jvm之.class文件解读(下)(二)
jvm之.class文件解读(下)(二)
|
存储 Java 编译器
jvm之.class文件解读(下)(一)
jvm之.class文件解读(下)
|
Arthas Java 测试技术
class 和 classloader 相关命令:redefine | 学习笔记
快速学习 class 和 classloader 相关命令:redefine
class 和 classloader 相关命令:redefine | 学习笔记
|
Arthas 测试技术 编译器
class 和 classloader 相关命令:jad 和 mc | 学习笔记
快速学习 class 和 classloader 相关命令:jad 和 mc
class 和 classloader 相关命令:jad 和 mc | 学习笔记
|
Arthas Java 测试技术
class 和 classloader 相关命令: sc 和 sm | 学习笔记
快速学习 class 和 classloader 相关命令: sc 和 sm
class 和 classloader 相关命令: sc 和 sm | 学习笔记