-
常量池存在堆中,之前(JDK7及之前)常量池存在于方法区
-
编译期生成的字面量和符号引用,放在类的常量池表,在类加载后,常量池表放在运行时常量池
-
类编译期间生成的符号引用,会放在类的常量池,类加载后又放在运行时常量池;同时,这些符号引用翻译出来的直接引用,也会被放在运行时常量池
-
类的常量池和方法区的运行时常量池不一样
● 类的常量池,不具备动态性,类的常量池中的值,只在类编译期间产生
● 运行时常量池,具备动态性,程序运行期间生成的常量(如通过String.intern()生成的字符串)会存放在运行时常量池
-
会产生OutOfMemoryError
-
综上所示,运行时常量池中,存放的内容如下
● 类编译期间生成的字面量
● 类编译期间生成的符号引用
● 类加载期间生成的符号引用翻译出的直接引用
● 程序运行期间生成的常量(String.intern)
● 程序运行期间由于动态连接,将符号引用翻译出的直接饮用
JVM(笔记)——【运行时数据区】运行时常量池
最新推荐文章于 2022-05-06 19:56:16 发布