1.1 方法区
方法区是存储已经被虚拟机加载的类信息(class文件)、常量和静态变量。 在JDK1.7是在永久代,在JDK1.8是在原空间。
1.2 常量池
常量池分为静态(class)常量池和运行时常量池。
运行时的常量池是属于方法区的一部分,而静态常量池是Class文件的。
常量池中存储的内容:
1.2.1 静态常量池
用于存放编译器compile生成的各种字面量和符号引用。 符号引用存储的是字符串在常量池中的索引。
1.2.2 运行时常量池
静态常量池内容在类初始化后存入运行时常量池。相对于静态常量池,运行时常量池具有动态性,在程序运行的时候可能将新的常量放入运行时常量池中,比如使用String类的
intern
方法。 运行时常量池还包含**自动包装类Byte,Short,Integer,Long,Character在-128到127之间值,**这小部分也叫缓冲池。