JVM(19)之 Class文件常量池】的更多相关文章

开发十年,就只剩下这套架构体系了! >>>   在上一博文Class文件中,我们了解了Class文件的一些基础知识.他的整个内部结构就是一张很大的表,我们就是从这张表入手,一一分析每个部分的结构.继续看这张表:     接着上一博文所说,魔数后面分别是次版本号和主版本号.由上图可知其分别占用两个字节.     被蓝色框框住的就是次版本号,划红线的就是主版本号.再次说明,Class文件内部的数据是按照规则紧凑排列的,中间不会有空隙.    接下来就是说明常量的个数了.代表着常量池中有多少个…
常量池 主要包括下面2类: 字面量(Literal):如int,double,String等: 符号引用(Symbolic Reference): 符号引用 类和接口的全限定名: 字段的名称和描述符: 方法的名称和描述符: 当虚拟机运行时,需要从常量池中获取对应的符号引用,再在类创建时或运行时解析.翻译到具体的内存地址之中: 常量池的项目类型(常量类型) 常量池中常量项的结构总表 说明: 下图中的tag值即上图中的标志值 解析Class文件指令 javap -verbose xxxx 其中xxx…
接上篇的继续 ConstantPool* constant_pool = ConstantPool::allocate(_loader_data, length, CHECK_(nullHandle)); _cp = constant_pool; // save in case of errors constantPoolHandle cp (THREAD, constant_pool); // parsing constant pool entries parse_constant_pool_…
先看bt栈 (gdb) bt #0 ConstantPool::allocate (loader_data=0x7fe21802e868, length=87, __the_thread__=0x7fe21800b800) at /home/atzhang/atzhang/openjdksource/openjdk8/openjdk/hotspot/src/share/vm/oops/constantPool.cpp:47 #1 0x00007fe2206d0bbc in ClassFilePa…
当index=18的时候JVM_CONSTANT_Utf8 case JVM_CONSTANT_Utf8 : { cfs->guarantee_more(2, CHECK); // utf8_length u2 utf8_length = cfs->get_u2_fast(); u1* utf8_buffer = cfs->get_u1_buffer(); assert(utf8_buffer != NULL, "null utf8 buffer"); // Got…
JVM中有: Class文件常量池.运行时常量池.全局字符串常量池.基本类型包装类对象 常量池 Class文件常量池: class文件是一组以字节为单位的二进制数据流,在java代码的编译期间,编写的java文件就被编译为.class文件格式的二进制数据存放在磁盘中,其中包括class文件常量池. class文件中存在常量池(非运行时常量池),其在编译阶段就已经确定,jvm规范对class文件结构有着严格的规范,必须符合此规范的class文件才能被jvm认可和装载. 一下写个简单的类,并编译 p…
当JVM运行Java程序的时候,它会加载对应的class文件,并提取class文件中的信息存放在JVM开辟出来的方法区内存中.那么这个class文件里面到底有些什么内容呢? 一.class文件内容概述 class文件是由8bits的字节流组成,全部字节构成了15个有意义的项目.这些项目之间没有任何无意义的字节,因此class文件非常紧凑.占据多字节空间的项目按照高位在前的顺序存放.下面我们详细讨论这些项目: ★ magic(魔数)    每个class文件的前4个字节称为魔数,值为0xCAFEB…
面试题:String a = "ab"; String b = "a" + "b"; a == b 是否相等 面试考察点 考察目的: 考察对JVM基础知识的理解,涉及到常量池.JVM运行时数据区等. 考察范围: 工作2到5年. 背景知识 要回答这个问题,需要搞明白两个最基本的问题 String a="ab",在JVM中发生了什么? String b="a"+"b",底层是如何实现? JV…
1 - 引言 2 - 常量池 2.1 你真的懂 Java的“字面量”和“常量”吗? 2.2 常量和静态/运行时常量池有什么关系?什么是常量池? 2.3 字节码下的常量池以及常量池的加载机制 2.4 是不是所有的数字字面量都会被存到常量池中?3 - 包装类对象池 =JVM 常量池4 - 字符串池 4.1 字符串池的实现——StringTable 4.2 字符串池存的是实例还是引用?5 - 补充 5.1 永久代为何被 HotSpot VM 废弃? 5.2 为什么 Java 要分常量.简单类型.引用类…
目录 简介 class文件中的常量池 运行时常量池 静态常量详解 String常量 数字常量 符号引用详解 String Pool字符串常量池 总结 简介 JVM在运行的时候会对class文件进行加载,链接和初始化的过程.class文件中定义的常量池在JVM加载之后会发生什么神奇的变化呢?快来看一看吧. class文件中的常量池 之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢? 字符串常量,类和接口名字,字段名,和其他一些在class中引用的…