当前位置 : 主页 > 编程语言 > java >

Java-虚拟机-常量池的表现方式

来源:互联网 收集:自由互联 发布时间:2022-07-13
常量池的表现方式 一.class文件中常量池的表现方式 下面有这样一个类 public class Act { public long m1 () { int a = 4 ; long b = 444 ; return a + b ; } } 将Act类编译成Act.class文件,使用16进制查看器打开



常量池的表现方式
一.class文件中常量池的表现方式
下面有这样一个类

public class Act {

public long m1() {
int a=4;
long b=444;
return a+b;
}
}

将Act类编译成Act.class文件,使用16进制查看器打开

Java-虚拟机-常量池的表现方式_java


依次类推,不同的常量池标志,用不同的数字表示,下表列出了Class文件中常量池所有的标志

类型(tag)


UTF8

1

Integer

3

Float

4

Long

5

Double

6

Class

7

String

8

Fieldref

9

Methodref

10

InterfaceMethodref

11

NameAndType

12

这个表虽然列出了常量池信息,但是我个人觉得它不重要,我主要想表达的是:在Class文件中,常量池是连续的

二:内存中常量池的表现方式

JVM读取class文件的常量池信息,会根据这些信息,最终组织到内存中,那么在内存中,常量池是什么样子的呢?JVM规范并没有规定内存中常量池是什么样子,不过下面这个样子是最合理的

Java-虚拟机-常量池的表现方式_16进制_02


所以常量池在内存中的表现,有点像旧时的HashMap,左侧红色虚线是一个数组,数组中每个元素大小是jvm中的一个字(4字节),注意long和double会占用两个元素,如果一个元素的内容不是字面值,而是引用值的话,那么右侧黄色虚线中,是具体每个元素的内容


上一篇:Java-构建器模式(Buider模式)
下一篇:没有了
网友评论