Skip to content

Latest commit

 

History

History
52 lines (34 loc) · 1.89 KB

JVM常量池.md

File metadata and controls

52 lines (34 loc) · 1.89 KB

JVM常量池

Jvm常量池分为:

  1. Class常量池(静态常量池)
  2. 运行时常量池
  3. 字符串常量池(全局常量池)
  4. 包装类型缓存池

Class常量池(静态常量池)

当Java源文件被编译后,就会生成Class字节码文件。

Class常量池就存在于Class文件中(Class文件的Constant Pool中)。

Class文件常量池主要存放两大常量:字面量和符号引用。

  1. 字面量: 字面量分为文本字符串(如: "abc",1等)和用final修饰的成员变量(实例变量和静态变量)

  2. 符号引用: 符号引用包括三种:类的全限定名,方法名和描述符,字段名和描述符。

Class文件常量池

运行时常量池

运行时常量池是在类加载阶段,将class二进制数据加载到内存, 并将数据保存到方法区,其中class文件中的常量池将保存到 运行时常量池(数据都在方法区,常量池肯定也在方法区)。 也就是说一个Class文件常量池对应一个运行时常量池。

字符串常量池(全局常量池)

字符串常量池在jdk7之前都是存于永久代(永久代)之中,jdk7以后存于 堆区之中。

包装类型缓存池

包装类缓存池并不是所有的包装类都有,并且缓存池缓存的是一定范围内的数据。 拥有包装类型缓存池的类有:Integer,Byte,Character,Long,Short, 而Float,Double,Boolean都不具有缓存池。

包装类的缓存池缓存的范围基本都为: -128 - 127之间, Character的缓存范围为 0 - 127。