天天看点

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

常量池的表现方式

一.class文件中常量池的表现方式

下面有这样一个类

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

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

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-虚拟机-常量池的表现方式