jvm运行时常量池和常量池

概述

常量池是字节码信息中的一部分,在类的字节码文件中我们能看到常量池信息
常量信息:
在这里插入图片描述

那么这个常量池跟方法区的运行时常量池有什么关系呢,这里的常量池加载进内存就叫运行时常量池,常量池包括了各种字面量和对类型、域、方法的符号引用,具体为数量值,字符串值,类引用,字段引用,方法引用。

为什么需要常量池

一个java源文件编译会形成一个字节码文件,但是字节码文件里其实是需要其他数据支持的,如果将其他数据也一并放入此字节码文件中,则会使得字节码文件变得贼大。那么如果放的是引用呢,那么就会极大地缩小字节码的大小。这时候就需要存放引用和各种字面量的常量池了
字节码操作时是对常量池引用的操作:
在这里插入图片描述

总的来说,常量池可以看做是一张表,虚拟机指令根据这张表找到要执行的类名,方法名,参数类型,字面量等。

运行时常量池是方法区中的一部分,存放了编译期间产生的各种字面量和符号引用的常量池在类加载后放到方法区中的运行时常量池中。
jvm为每个已加载的类型都维护了一个常量池,里面的数据通过数组的下标访问
运行时常量的地址为真实地址,不再是常量池中的符号地址了

猜你喜欢

转载自blog.csdn.net/lyd135364/article/details/121151591