JAVA中静态常量池、运行时常量池、字符串常量池区别看上去很相近的概念容易混淆,区分如下(注意英文单词的区别)
- 静态常量池(Constant Pool)
文章图片
- 运行时常量池(Run-time Constant Pool)
通常,再Run-time Constant Pool中除了保存来自class文件中的常量池数据(既字面符号引用),还会保存由符号引用翻译得到的直接引用。
可以通过HSDB等工具查看内存各个数据,其中可以通过查看内存中Class的Constant pool就是Run-time Constant Pool。
- 字符串常量池(StringTable)
注意区分:上面的Constant Pool是存放:所有字面量内容,这里的字面量是远多于String的,如上图的Constant Pool(既Constant Pool是各种常量等字面量的合集,而StringTable仅与java.lang.String有关。两者是不同的东西。
HotSpot VM里,记录interned string的一个全局表叫做StringTable,它本质上就是个HashTable。常量表存储以双引号包住的String对象的地址引用,而不是String对象本身。具体见另一文章《JVM中字符串常量池StringTable在内存中形式分析》
总上:静态常量池和运行时常量池两者关系十分密切;而字符串常量池(StringTable)是另一个东西。从英文上看名字也可看出差异远近。
推荐阅读
- 数据结构|给定值将链表分割成两部分
- JAVA|Java中常量池、运行时常量池和字符串常量池的区别
- Java|Java整合腾讯云短信发送
- LeetCode|LeetCode刷题笔记(279.完全平方数)
- mybatis|mybatis-config.xml 以及遇到的问题
- #|MyBatis-第一个MyBatis程序
- Java|初学Mybatis-第一个Mybatis程序及踩坑解决
- 机器学习|CVPR 2022 接收结果出炉!录用 2067 篇,接收数量上升24%(附最新论文速递)
- 如何在 github 上找到优质代码