声明:
Author:赵志乾
Date:2018-6-18
Declaration:All Right Reserved!!!
背景知识:
常量池这一概念在虚拟机内存章节中也提到过(《虚拟机内存》)。虚拟机内存中的常量池位于方法区内,其全称为运行时常量池。之所以成为运行时常量池,是因为其伴随虚拟机的运行而存在,具有动态行,即随时间的推移,会有新的内容加入,也有旧的内容被gc线程回收。而字节码文件中的常量池则是一个静态概念,其内容不会虽时间发生变动。
字节码文件中的常量池
1、静态常量池紧随文件版本号,是字节码文件中的第一个表类型数据。其作为文件中的资源仓库,为其他内容提供了各种索引信息。
静态常量池的大小随文件而不同,故在其入口处放置一容量计数器,以表征当前文件中静态常量池的大小。而池内存放的内容大体上可分为两大类:字面常量和符号引用。
静态常量池本身是一个表类型数据,并且其存放的每一个数据项也是一个表类型数据。最无语的是这些数据项共有14种类型,且结构各不相同。不过每一数据项的起始都会有一个标志位tag,来表征其属于哪一种常量类型。
参考资料:《深入理解java虚拟机》--周志明