②并非预置如Class文件中常量池的内容才能进入方法区运行时常量池,运行期也可将新的常量放入池内,用得较多的时String类的intern()方法 二.Class类文件常量池 1.比喻为Class文件里的资源仓库,它是Class文件结构中与其他项目关联最多的数据,通常也是占用Class文件空间最大的数据项目之一 2.常量池中数...
1.字节码文件中有个constant pool,就是常量池 2.当字节码文件被加载到内存中之后,方法区中会存放字节码文件的constant pool相关信息,这时候就成为了运行时常量池 3.常量池保存了各种字面量和对类型、域和方法的符号引用。 4.常量池可以看做是一张表,虚拟机指令根据这张表找到要执行的方法名、类名、参数类型、...
根据以上知识和代码,我们继续来看看Class文件接下来的数据。紧接着常量池数量之后的便是常量表了。刚刚也说了,每个表都会有一个一个字节的标志位,那么常量池数量0x002E之后一个字节便是0x0A,这个就是标志位,十进制是10,查表可知是个方法的符号引用。 他的表结构如下: 因此后面还有4个字节是属于该表的,我们接...
new String("ABC") :常量池+堆各一个,2个 后面再 "+ ABC":常量池新生成 “ABCABC" 1个 所以共3个 下面两个池都在方法区里(method area),是每个被加载的类,都有的 2. 运行时常量池(runtime constant pool) 当程序运行到某个类时,class文件中的信息就会被解析到内存的方法区里的运行时常量池中。看...
2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域:存放静态成员(static定义的)5. 常量池:存放字符串常量和基本类型常量(public static final)。6. 非RAM存储:硬盘等永久...
一.运行时常量池(Runtime Constant Pool) 1.方法区的一部分,因此受到内存限制,当无法再申请内存时会抛OutOfMemoryError异常 2.Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有常量池(Constant Pool Table) 3.常量池表(Constant Pool Table): ...