【JVM】阅读Class字节码:常量池

目录

基本结构解析

常量池

常量池简介

如何阅读Class文件中的常量池信息


基本结构解析

Magic(魔数)

Magic的唯一作用是确定这个文件是否为一个能被虚拟机所接受的class 文件。魔数值固定为0xCAFEBABE,不会改变。

常量池

常量池简介

下图是反编译过后的字节码文件中我们找到的常量池的部分。

可见常量池数量是从1到52,共52个常量,了解了常量池的数量,接下去我们看整个常量池的内容怎么读,即下图红线部分。

如何阅读Class文件中的常量池信息

不同的常量类型,用tag来区分的,它后面对应的info 结构是不一样的。

比如下图的常量07。

根据7去找对应的常量类型,发现是CONSTANT_Class。

接着去找CONSTANT_Class的info结构。

也就是07后面的两位,即0002是它的名字的索引,即在常量池中的索引。

即下图全限定名的索引为2。

这样07就读完了,我们接着往下看后面的01。

同理,通过01找到常量类型。

找到它对应的结构。

发现接下去的两位是它的长度,即十六进制的0019,也就是十进制的25,从0019往后数25个到6F的位置,右边对应的就是它的全限定名。接着往下看就又是07,这样多看几次就学会看了。

相关推荐
期待のcode1 天前
Java虚拟机栈
java·开发语言·jvm
忘记9261 天前
jvm性能调优
jvm
C++chaofan1 天前
Java 并发编程:synchronized 优化原理深度解析
java·开发语言·jvm·juc·synchronized·
sww_10261 天前
JVM基础学习
jvm·学习·测试工具
芒克芒克1 天前
深入浅出JVM的运行时数据区
java·开发语言·jvm·面试
月明长歌1 天前
JavaThread类详解核心属性、常用方法与实践
java·开发语言·jvm
kaico20181 天前
JVM的垃圾回收
开发语言·jvm
zfj3211 天前
java垃圾收集 minorgc majargc fullgc
java·开发语言·jvm·gc·垃圾收集器
烟沙九洲1 天前
JVM 堆内存分代
java·jvm
独自破碎E1 天前
JVM由哪些部分组成?
jvm