[java]JVM之运行时常量池里到底有什么

2.2.2.2 CONSTANT_Integer_info
项目类型描述
tagu1值为3
bytesu4按照高位在前存储的int值
2.2.2.3 CONSTANT_Float_info
项目类型描述
tagu1值为4
bytesu4按照高位在前存储的float值
2.2.2.4 CONSTANT_Long_info
项目类型描述
tagu1值为5
bytesu8按照高位在前存储的long值
2.2.2.5 CONSTANT_Double_info
项目类型描述
tagu1值为6
bytesu8按照高位在前存储的double值
2.2.2.6 CONSTANT_Class_info
项目类型描述
tagu1值为7
indexu2指向全限定名常量项的索引
2.2.2.7 CONSTANT_String_info
项目类型描述
tagu1值为8
indexu2指向字符串字面量的索引
2.2.2.8 CONSTANT_Fieldref_info
项目类型描述
tagu1值为9
indexu2指向声明字段的类或者接口描述符CONSTANT_Class_info的索引项
indexu2指向字段描述符CONSTANT_NameAndType的索引项
2.2.2.9 CONSTANT_Methodref_info
项目类型描述
tagu1值为10
indexu2指向声明方法的类或者接口描述符CONSTANT_Class的索引项
indexu2指向名称及类型描述符CONSTANT_NameAndType的索引项
2.2.2.10 CONSTANT_InterfaceMethodref_info
项目类型描述
tagu1值为11
indexu2指向声明方法的接口描述符CONSTANT_Class的索引项
indexu2指向名称及类型描述符CONSTANT_NameAndType的索引项
2.2.2.11 CONSTANT_NameAndType_info
项目类型描述
tagu1值为12
indexu2指向该字段或方法名称常量项的索引
indexu2指向该字段或方法描述符常量项的索引
2.2.2.12 CONSTANT_MethodHandle_info
项目类型描述
tagu1值为15
reference_kindu1值必须在1至9之间[1-9]它决定了方法句柄的类型。方法句柄类型的值表示方法句柄的字节码行为
reference_indexu2值必须是对敞亮吃的有效索引
2.2.2.13 CONSTANT_MethodType_info
项目类型描述
tagu1值为16
descriptor_indexu2值必须是对常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示方法的描述符
2.2.2.14 CONSTANT_Dynamic_info
项目类型描述
tagu1值为17
bootstrap_method_attr_indexu2值必须是对当前Class文件中引导方法表的bootstrap_methods[]数组的有效索引
name_and_type_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_NameAndType_info结构,表示方法名和方法描述符
2.2.2.15 CONSTANT_InvkoeDynamic_info
项目类型描述
tagu1值为18
bootstrap_method_attr_indexu2值必须是对当前Class文件中引导方法表的bootstrap_methods[]数组的有效索引
name_and_type_indexu2值必须是对当前常量池的有效索引,常量池在该索引处的项必须是CONSTANT_NameAndType_info结构,表示方法名和方法描述符
2.2.2.16 CONSTANT_Module_info
项目类型描述
tagu1值为19
name_indexu2值必须是对常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示模块名称
2.2.2.17 CONSTANT_Package_info
项目类型描述
tagu1值为19
name_indexu2值必须是对常量池的有效索引,常量池在该索引处的项必须是CONSTANT_Utf8_info结构,表示包名称

3. 查看常量池表

如果我们使用文本编辑器打开某个Class文件,那么你见到的场景大概是这样的: image.png

除了魔数CAFE BABE 其他的信息阅读起来可能会有很大的困难。好在Oracle为我们提供了一个专门用于分析Class文件字节码的工具:javap。javap的使用方式:

javap -verbose xxxx.class

简单写一个java类Test, 代码如下:

public class Test {
String test = “dafa”;
String test1 = “soft”;
String test3 = “dafasoft”;

public Test() {
}

void Test() {
this.testFun();
}

public void testFun() {
}

public void testFun1() {
}

public void testFun2() {
}

写在最后

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

复习一周,字节跳动三场技术面+HR面,不小心拿了offer

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源

求职者节约几天甚至几周时间浪费在无用的资源上。

[外链图片转存中…(img-4A52r723-1714482500824)]

[外链图片转存中…(img-tW60v5PR-1714482500824)]

上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值