美文网首页
JVM 字节码-02 常量池学习

JVM 字节码-02 常量池学习

作者: 丿易小易 | 来源:发表于2020-12-13 11:18 被阅读0次
image image

常量池计数器

这里的U2 标识常量池的大小 0x0023 十进制数为32+3=35

常量池计数器后面是常量池 (是一个表结构)

常量池的长度是 35-1 =34 即常量池的计数-1 这里共有34项
每一项都是表结构,
常量池主要是存储字符串常量,类,接口名,字段名和其他常量
java虚拟机就是依赖这些常量池中的表结构进行运行

常量池中项(cp_info)的结构

项通用结构:
[图片上传失败...(image-2837bd-1607741032471)]

ps 这里的 info[] 只是一个结构的概况,不是真实的结构, 具体的结构取决于tag的值

tag 为无符号数 (有14种项类型)


image image

常量池中34项的第一项的tag=10 对应到tag项说明中常量类型为 CONSTANT_Methodref
简单翻译是 方法常量引用类型
每一个类型都有其特有的表结构

CONSTANT_Methodref 的表结构(方法项) 这里是#1

image

这里显示是占据了5个U1, 这个结构就是cp_info的一种具像表示 截图如下:


image

0x0006 表示的是类索引 十进制表示为 #6
0x0015 表示的是名称或者类型索引 十进制表示为 #21

ps: 可以通过java -p MainTest.class 来显示

CONSTANT_Filedref 的表结构 (字段项) #2

image image

tag: 09
class_index : 0x0016 ===> 十进制 #32
name_and_type_index: 0x0017 ===> #33

CONSTANT_Stringref 的表结构 (字符项) #3

image image

tag: 08
class_index : 0x0018 ===> 十进制 #34

CONSTANT_Class 的表结构 (类或接口) #5 #6

image
image

tag:07
name_index: 0x001b= 16+11 = #27

CONSTANT_Utf8 的表结构 (常量) #7

image image image image

CONSTANT_NameAndType(字段或方法)

image

name_index: 常量池索引 ==> 方法名
descriptor_index: 常量 字段描述符或方法描述符 ==> 详见方法描述符与字段描述符

image

等等, 这里就不细化处理了!

javap -v MainTest.class 的方法可以查看..

image

相关文章

  • JVM 字节码-02 常量池学习

    常量池计数器 这里的U2 标识常量池的大小 0x0023 十进制数为32+3=35 常量池计数器后面是常量池 ...

  • Java虚拟机-字节码指令

    1 字节码指令 Java字节码指令的执行离不开操作数栈,局部变量表,和常量池。 2 常量池 对于字节码指定来说,常...

  • JVM_字节码:字节码常量池分析

    分析的条件: 基于上一篇的16进制字节码及反编译结果(javap -verbose the desire clas...

  • JVM-常量池

    JVM-常量池 JVM常量池分为 Class文件常量池 运行时常量池 全局字符串常量池 基本类型包装类对象常量池 ...

  • Java字节码常量池

    引言 上篇文章简单介绍了java Class 字节码文件的基本格式。本文我们直接通过阅读字节码文件来进一步理解字节...

  • java基础类型、String类理解、版本对比、1.8新特性

    1、java基本数据类型及长度 2、jvm的常量池: JVM常量池浅析Java常量池理解与总结 Java中的常量池...

  • 第二章 中间表示

    java字节码作为中间表示(使用javap命令查看) baf中间表示把200多种不同的字节码精简为60种没有常量池...

  • JVM知识精粹

    1.jvm执行字节码文件 流程:jvm通过类加载器加载字节码文件----字节码校验器---翻译字节码(解释执行,反...

  • JVM_字节码:字节码常量池结构与描述符

    使用javap -verbose 命令分析一个字节码文件时,将会分析该字节码文件的魔数、版本号、常量池、类信息、类...

  • 字节码解析

    一个普通的Java类与其字节码举例: 字节码中包含哪些内容? 魔数(0xCAFEBABE)、版本号、常量池、访问标...

网友评论

      本文标题:JVM 字节码-02 常量池学习

      本文链接:https://www.haomeiwen.com/subject/lxuegktx.html