元空间、类文件常量池、运行时常量池、字符串常量池

元空间

元空间是JDK8之后方法区的实现,开辟在直接内存中,不直接受JVM内存大小的限制。

元空间中的主要内容有各个类加载后的Klass(可以被JVM理解的类元数据信息)和运行时常量池,还存储了静态变量和JIT编译之后的代码缓存

类文件常量池

是.class文件中描述类的元数据信息的静态数据结构,包括类、方法、字段的描述和符号引用,以及各种编译期就可以确定的字面量

运行时常量池

运行时常量池是类开始加载之后创建的,是类文件常量池的动态体现,除了存储括类、方法、字段的描述和符号引用外,主要可以在运行期间动态解析类文件常量池中的字段和类的符号引用为直接引用对于引用类型字段的静态变量,指向的是元空间中的引用;对于引用类型字段的非静态变量,直接引用是一个偏移量;对于被加载的类本身,直接引用就直接指向堆空间中的Class实例),还存储了字符串常量池中的常量引用,以及编译器可以确定的基本类型的常量值。需要注意的是某些常量可能在运行时添加:例如,通过 String.intern() 方法

字符串常量池

其中的实例元素在运行时常量池中都有对应的引用,但空间开辟在堆上,字符串常量池存储的是由这些编译器确定的字符串字面量所创建的 String 对象实例。它也存储通过 String.intern() 方法显式加入的字符串对象。字符串常量池中的对象实例的引用存放在运行时常量池中。

你可能感兴趣的:(查漏补缺,java)