- JDK1.8 以前的 HotSpot JVM 有方法区,也叫永久代(permanent generation)
- 方法区用于存放已被虚拟机加载的类信息,常量、静态遍历,即编译器编译后的代码
- JDK1.7 开始了方法区的部分移除:符号引用(Symbols)移至 native heap,字面量(interned strings)和静态遍历(class statics)移至 java heap
常量池:
字面量(Literal)和符合引用(Symbolic References)。
字面量如:文本字符串、final常量值等,
符号引用包含下面3类:
- 类和接口的权限定名
- 字段的名称和描述符
- 方法的名称和描述符
字符串常量池
JDK1.7之前字符串常量池存放在方法区中;
JDK1.7开始字符串常量池存放在堆中;
javap -p -v Test08.class
示例代码
package com.api.Demo07;
public class Test08 {
public static void main(String[] args) {
/**
* java 元空间
* 1. JDK1.8 之前的称作 方法区/永久代,存放 静态变量、calss信息,改名——元空间
* 2. JDK1.7 开始将 字符串常量池 从方法区 改为 堆中存放
*/
/**
* 常量池——表格形式
* #0 str
* #1 String
* #2 mayikt
*
* 上面这些形成后称为——运行常量池
* 通过反汇编 查看常量池
* javap -p -v Test.class
*/
String str = "mayikt";
System.out.println(str);
}
}
反编译 查看String常量池
下一篇文章: