常量池_运行时常量池_字符串常量池
常量池
常量池是在编译期间由 Java 编译器生成的一个数据结构;
存储了 类或接口中的所有字面量和符号引用。
这些信息包括但不限于:
- 字符串字面量
- 整型、浮点型、字符型等基本类型的字面量
- 类和接口的全限定名
- 字段名和描述符
- 方法名和描述符
- 方法和字段的访问标志
每个类文件都包含一个常量池,它是 class 文件的一部分。
当 JVM 加载类时,会将这个常量池的内容复制到方法区中的运行时常量池中;
运行时常量池
方法区的一部分,它包含了类或接口的常量池以及其他运行时产生的常量。
运行时常量池是在类加载过程中由 JVM 创建的,它的内容来自于类文件中的常量池。
作用:
提供了一种机制来查找和解析符号引用,并将它们转换为直接引用。这个过程通常被称为“动态链接”。
需要注意的是,运行时常量池不仅仅包含从类文件常量池复制过来的信息,还可能包含其他运行时生成的常量,例如动态代理类的元数据。
字符串常量池
字符串常量池是一个特殊的区域;
用于存储字符串对象的引用。
当创建一个新的字符串对象时,JVM 会检查字符串常量池中是否已经存在相同的字符串。如果存在,那么就直接返回该字符串的引用;否则,创建一个新的字符串对象并将其引用存入字符串常量池。
在 Java 7 及之前版本中,字符串常量池位于永久代(PermGen),而在 Java 8 及之后版本中,字符串常量池被移动到了堆内存中;
查看当前进程的大小:
jinfo -flag StringTableSize 进程ID
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-12-12 Kafka---系统学习