常量池
Class常量池
Class常量池可以理解为是Class文件的资料库。常量池用于存放编译期生成的各种 "字面量" 和 "符号引用"
类文件中除了包含类的版本、字段、方法、接口等描述信息,还包含的就是常量池
字面量指由字母、数字等构成的字符串或者数字常量。
符号引用是编译原理中的概念,是相对于直接引用来说的,主要包括以下三类常量:
- 类和接口的全限定名
- 字段的名称和描述符
- 方法的名称和描述符
最开始这些字面量和符号引用都是保存在常量池中,他们都是静态信息
当程序运行时被加载到内存后,这些符号才有对应的内存地址信息。这些常量一旦被转入内存就会变成运行时常量池。运行时常量池在方法区中
Math类,生成的对应的class文件,class文件中定义了一个常量池集合,这个集合用来存储一系列的常量。这时候的常量池是静态常量池。
当程序运行起来,会将类信息加载到方法区中,并为这些常量分配内存地址,这时原来的静态常量池就转变成了运行时常量池。
符号引用在程序运行以后被加载到内存中,原来的代码就会被分配内存地址,引用这个对象的地方就会变成直接引用,也就是我们说的动态链接了。