常量池的表现方式
一.class文件中常量池的表现方式
下面有这样一个类
public class Act {
public long m1() {
int a=4;
long b=444;
return a+b;
}
}
将Act类编译成Act.class文件,使用16进制查看器打开
依次类推,不同的常量池标志,用不同的数字表示,下表列出了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规范并没有规定内存中常量池是什么样子,不过下面这个样子是最合理的