Class文件结构-常量池
常量池里存放:
1.字面量(Literal)
• 文本字符串
• 声明为final的常量值(final的8种基本类型)
• 非final的基本类型也可能进(doublefloatlong)
2.符号引用(Symbolic References)
• 类和接口的全限定名(Fully Qualified Name)
• 字段的名称和描述符(Descriptor)
• 方法的名称和描述符
备注:
1. constant_pool_count=1表示常量池中有0个常量项
2. 表的第一个字节表示常量类型(tag)
常量项结构总表
示例:
package zero.desk.constantpool; public class ConstantPool extends C implements A,B{
private String str = "test string";
private final int a = 10;
private final long b = 10;
private final long bb = 100;
private int c = 11;
private float d = 12f;
private float e = 12f;
private double ee = 12f; private int m; public int inc() {
return m + 1;
}
}
Constant pool:
#1 = Methodref #20.#50 // zero/desk/constantpool/C."<init>":()V
#2 = String #51 // test string
#3 = Fieldref #19.#52 // zero/desk/constantpool/ConstantPool.str:Ljava/lang/String;
#4 = Fieldref #19.#53 // zero/desk/constantpool/ConstantPool.a:I
#5 = Long 10l
#7 = Fieldref #19.#54 // zero/desk/constantpool/ConstantPool.b:J
#8 = Long 100l
#10 = Fieldref #19.#55 // zero/desk/constantpool/ConstantPool.bb:J
#11 = Fieldref #19.#56 // zero/desk/constantpool/ConstantPool.c:I
#12 = Float 12.0f
#13 = Fieldref #19.#57 // zero/desk/constantpool/ConstantPool.d:F
#14 = Fieldref #19.#58 // zero/desk/constantpool/ConstantPool.e:F
#15 = Double 12.0d
#17 = Fieldref #19.#59 // zero/desk/constantpool/ConstantPool.ee:D
#18 = Fieldref #19.#60 // zero/desk/constantpool/ConstantPool.m:I
#19 = Class #61 // zero/desk/constantpool/ConstantPool
#20 = Class #62 // zero/desk/constantpool/C
#21 = Class #63 // zero/desk/constantpool/A
#22 = Class #64 // zero/desk/constantpool/B
#23 = Utf8 str
#24 = Utf8 Ljava/lang/String;
#25 = Utf8 a
#26 = Utf8 I
#27 = Utf8 ConstantValue
#28 = Integer 10
#29 = Utf8 b
#30 = Utf8 J
#31 = Utf8 bb
#32 = Utf8 c
#33 = Utf8 d
#34 = Utf8 F
#35 = Utf8 e
#36 = Utf8 ee
#37 = Utf8 D
#38 = Utf8 m
#39 = Utf8 <init>
#40 = Utf8 ()V
#41 = Utf8 Code
#42 = Utf8 LineNumberTable
#43 = Utf8 LocalVariableTable
#44 = Utf8 this
#45 = Utf8 Lzero/desk/constantpool/ConstantPool;
#46 = Utf8 inc
#47 = Utf8 ()I
#48 = Utf8 SourceFile
#49 = Utf8 ConstantPool.java
#50 = NameAndType #39:#40 // "<init>":()V
#51 = Utf8 test string
#52 = NameAndType #23:#24 // str:Ljava/lang/String;
#53 = NameAndType #25:#26 // a:I
#54 = NameAndType #29:#30 // b:J
#55 = NameAndType #31:#30 // bb:J
#56 = NameAndType #32:#26 // c:I
#57 = NameAndType #33:#34 // d:F
#58 = NameAndType #35:#34 // e:F
#59 = NameAndType #36:#37 // ee:D
#60 = NameAndType #38:#26 // m:I
#61 = Utf8 zero/desk/constantpool/ConstantPool
#62 = Utf8 zero/desk/constantpool/C
#63 = Utf8 zero/desk/constantpool/A
#64 = Utf8 zero/desk/constantpool/B
Class文件结构-常量池的更多相关文章
- (十三)class文件结构:常量池(转)
Class类文件的结构 全局规范 1.任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(譬如类或接口也可以通过类加载器直接生成).本章中,只是通俗 ...
- Java Core - Class文件结构之魔数、版本号、常量池
下图是一个.java文件被编译器编译后产生的二进制的class文件的内容:由图可知,class文件是用两位16进制数来表示的一个字节. 1个字节就是1Byte,1Byte=8bit. 一.魔数(CAF ...
- JVM之运行时常量池(Runtime Constant Pool)
基本特性: 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区. class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式, 包括编译期的数值字 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件里的常量池具体解释(上)
[last updated:2014/11/27] NO1.常量池在class文件的什么位置? 我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了clas ...
- 【JVM虚拟机】(5)---深入理解JVM-Class中常量池
深入理解Class---常量池 一.概念 1.jvm生命周期 启动:当启动一个java程序时,一个jvm实例就诞生了,任何一个拥有main方法的class都可以作为jvm实例运行的起点. 运行:mai ...
- [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构
前言概述 本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义 class文件包含了java虚拟机指令集 和 符号表 以及若 ...
- class字节码结构(一)(字节码结构和字节常量池的结构)
<Java虚拟机原理图解> 1.1.class文件基本组织结构 关于变量的几个叫法: 局部变量/全局变量:很好区分根据所在位置. 类变量:静态的全局变量. 类常量:全局的final修饰的变 ...
- 《Java虚拟机原理图解》 1.2.2、Class文件中的常量池详解(上)
我的上一篇文章<Java虚拟机原理图解> 1.class文件基本组织结构中已经提到了class的文件结构,在class文件中的魔数.副版本号.主版本之后,紧接着就是常量池的数据区域了,如下 ...
- Java中的常量池
JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的 ...
随机推荐
- 给一线讲产品·8期|VPC、子网、安全组,是什么关系?
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 使用 RMI 实现方法的远程调用
RMI 介绍 RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此 ...
- [TimLinux] django 下载功能中文文件名问题
from django.utils.encoding import escape_uri_pathfrom django.http import HttpResponse def download(r ...
- Java并发编程系列-(5) Java并发容器
5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...
- 基于icamera usb2.0的视频采集系统之mt9m001c12stc测评
基于usb2.0的视频采集系统之mt9m001c12stc测评 因为该sensor不带isp,所以不支持白平衡,默认图像彩色颜色会和实际偏离,演示如下 颜色偏绿,所以降低该通道的增益,或者提供其他通道 ...
- linux-export
使自定义普通变量转换为环境变量: 1. env查看环境变量 2. 设置临时环境变量,关机重启时不生效. export path=$path:/usr/sbin/ 3. 修改profile文件,关机重启 ...
- Python3 数据结构之词频统计(英文)
import string path = r'C:\Users\Black\Desktop\Walden.txt' with open(path, 'r', encoding='utf-8') as ...
- 从零开始入门 K8s | etcd 性能优化实践
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 17 讲. 导读:etcd 是容器云平台用于存储关键元信息的组件.阿 ...
- 让外部的开发机直接访问Kubernetes群集内的服务!
让外部的开发机直接访问Kubernetes群集内的服务! 1.场景 容器化+K8s编排已经是现在进行时把网站的多个项目设计为云原生(Cloud Native)或老项改造为云原生可以获得诸多能力例如无云 ...
- maven打包mapper.xml打不进去问题
<resources> <resource> <directory>src/main/java</directory> <includes> ...