整个JVM中常量池可分为:
1. 静态常量池
2. 运行时常量池
3. 字符串常量池
一、静态常量池
java类被编译成class文件后,每一个class类文件都有一个class常量池。class常量池用于存放编译器生成的各种字面量和符号引用。
字面量:1. 文本字符串 2. 八种基本数据类型 3.final修饰的常量等
符号的引用:1. 类和方法的全限定名 2. 字段的名称和描述符 3. 方法的名称和修饰符
二、运行时常量池
运行时常量池也叫class常量池,当类加载到内存中后,JVM会将class常量池中的内存存放在运行时常量池中,同时在运行期间还可以存放新的常量。运行时常量池包含了class常量池和字符串常量池
三、字符串常量池
JDK1,6及之前在运行时常量池中
JDK1.7中被移入堆中。(class常量池和字符串常量池都被移入堆中)
JDK1.8及之后,运行时常量池在元空间,字符串常量池依旧在堆中。
| JDK版本 | 方法区的实现 | 运行常量池所在位置 |
| 1.6 | 永久代 | 永久代 |
| 1.7 | 永久代 | 堆 |
| 1.8 | 元空间 | 堆 |
灵魂拷问:String s = new String("abc");创建了几个对象?
2321

被折叠的 条评论
为什么被折叠?



