一、常量池体系全貌揭晓
1.1 三重宇宙的层级关系
Java常量池体系
Class文件常量池
运行时常量池
字符串常量池
方法区存储
堆内存存储
1.2 各层核心职责对比
常量池类型 | 存储位置 | 生命周期 | 主要功能 |
---|---|---|---|
Class文件常量池 | .class文件 | 文件存续期间 | 存储符号引用 |
运行时常量池 | 方法区(元空间) | 类加载期间 | 动态解析后的直接引用 |
字符串常量池 | 堆内存 | JVM运行期间 | 维护字符串唯一性 |
二、Class文件常量池深潜
2.1 常量池二进制结构解析
典型常量项结构示例:
CONSTANT_Class_info { u1 tag = 7; // 类符号 u2 name_index; // 指向UTF8常量 } CONSTANT_Utf8_info { u1 tag = 1; // UTF8标识 u2 length; // 字节长度 u1 bytes[length]; // 真实数据 }
2.2 常量池查看实战
// DemoClass.java public class DemoClass { private final String NAME = "Java常量池";