首页 > 编程知识 正文

运行时常量池和方法区,什么是常量池

时间:2023-05-05 03:02:25 阅读:189867 作者:2822

编程区域用于存储已经加载到虚拟机中的类信息(class文件存储在方法区域中)、常数、静态变量。

我对方法论区的理解其实是逻辑区,它在哪里并不重要,山内外都无关紧要。 对HotSpot来说,方法区JDK1.7是在永久代,而1.8在元空间(与堆不相连的本地内存)。

常量池是方法区域的一部分(它说没有准备好)。

1 .常量池:常量池分为class常量池和运行时常量池,运行时常量池是方法区域的一部分,Class常量池位于Class文件中。

另一些图显示了方法区域中的class文件信息中包含的内容。

也就是说,在方法区域内的类文件信息中包括魔术编号、版本号、常量池、类、父类、接口阵列、字段、方法等信息,其中也包括字段和方法的信息。 (可以查看类结构-类文件结构)

常量池中存储的内容:

. class文件常量池和方法区域运行时常量池: class文件常量池:

class文件加载到Java虚拟机后,存在方法区域的若干字面量和符号引用,字面量引用了字符串、基本类型的常量和符号引用了常量池中的字符串,而http://www.Sina.com

由于方法区域中的运行时常量池(动态) class文件包含常量池信息,所以类加载后,该部分存储在方法区域的运行时常量池中,常量池中的一些符号引用将直接转换为引用。 例如,符号引用不是直接存储字符串,而是存储字符串在常量池里的索引。这是因为这些方法不会被其他版本重写。 3358www.Sina ) com )是

和Class文件的一大特点是具有动态性。类的静态方法或私有方法,实例构造方法,父类方法,,即String类的intern ()方法。

w3 .总结:能在加载的时候就可以将符号引用转变为直接引用

执行时间常数池内的内容除了常数池内的内容之外,符号引用的索引值还指向执行时间常数池。 它还将静态常量池中的符号引用直接转换为引用,动态常量池中的内容可以动态添加。 例如,可以通过调用String的intern方法将String值添加到String常量池中。 其中,String常量池包含在运行时常量池中。Java并非要求常量一定只有编译期才能产生,即并不是先放入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中

那么,integer-10是在运行时常量池中查找还是在常量池中查找?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。