1)所谓**静态常量池**,即\*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。 代码语言:txt 复制 2)而**运行时常量池**,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,...
每个class都有一个运行时常量池,类在解析之后将符号引用替换成直接引用,与全局常量池中的引用值保持一致。 运行时常量池相对于class文件常量池的另外一个特性是具备动态性,java语言并不要求常量一定只有编译器才产生,也就是并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入...
静态常量池指的是在编译期确定,保存在class文件中的一些数据。 静态常量池是在编译期间生成的,存储在.class文件中。 字面量(Literal)和符号引用量,字面量相当于Java语言层面常量的概念,如文本字符串、声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量: 1、类和接口的全限定名; ...
在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代。 在JDK1.7字符串常量池和静态变量被从方法区拿到了堆中,运行时常量池剩下的还在方法区, 也就是hotspot中的永久代。 在JDK8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆,运...
静态常量池:每个class文件有对应的一个 Class常量池 ,里面包含符号引用和字面量。运行时常量池:当class被加载后,class常量池中的内容会被加载到方法区的运行时常量池中,但是并不包含 字面量中字符型 内容。字符串常量池:当class被加载后,class常量池字面量中的字符型
运行时常量池相对于class文件常量池的另外一个特性是具备动态性,java语言并不要求常量一定只有编译器才产生,也就是并非预置入class文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中。 字符串常量池 字符串池里的内容是在类加载完成,经过验证、准备阶段之后存放在字符串常量池中。关于...
更加详细一点的说法是方法区里存放着类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用,该常量池其实是静态常量池,也就是class常量池,不是运行时常量池。 静态常量池存储的是当class文件被java虚拟机加载进来后存放在方法区的一些字面量和符号引用,如下: 字面量, 符号引用与直接引用 ......
运行时常量池相较于class文件中的静态常量池有一个重要特征是运行时常量池具备动态性,Java语言并不要求常量只有编译期才能产生,也就是说:并不是只有预置到class文件静态常量池中的内容才能进入到方法区的运行时常量池,在运行期间,也可能将新的常量放入运行时常量池中,这种特性被开发人员利用的较多的有String类的inter...
字符串对象中的char数组指向运行时常量池中的”计算机软件“// 最后在字符串常量池记录一下这个字符串对象的引用// 调用str2.intern()方法时,会首先判断str2指向的字符串对象里的字符串是否首次出现在运行时常量池// 这里非首次出现,所以会将字符串常量池中记录的引用返回给str3// 虽然str3和str2指向的字符串...
Java虚拟机的静态常量池和运行时常量池 静态)常量池:用于存放编译器生成的各种字面量和符号引用(符号引用区别于直接引用,后者在class字节码文件被虚拟机解析之后,符号引用将被替换为直接引用)。 运行时常量池:(静态)常量池中的内容在类加载(这里的类加载指class字节码文件经过加载连接初始化的过程)后存放入方法区的...