编程区域用于存储已经加载到虚拟机中的类信息(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是在运行时常量池中查找还是在常量池中查找?