上接深入java虚拟机——深入java虚拟机(二)——类加载器详解(上),在上一篇文章中,我们讲解了类的生命周期的加载和连接,这一篇我们接着上面往下看。 类的初始化:在类的生命周期执行完加载和连接之后就开始了类的初始化。在类的初始化阶段,java虚拟机执行类的初始化语句,为类的静态变量赋值,在程.....
分类:
其他好文 时间:
2014-12-14 00:33:07
阅读次数:
264
类从被加载到虚拟机内存中开始,到缷载出内存为止,它的整个生命周期包括了:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using),缷载(Unloading)七个阶段。其中验证,准备,解析三个阶段统称为连接(Linking)阶段,这七个阶段的发生顺序如下图:
加载,验...
分类:
编程语言 时间:
2014-12-13 19:26:59
阅读次数:
226
在Class文件,字段表,方法表中都可以携带自己的属性表集合,以用于描述某些场景专有的信息。与Class文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写入自己定义的属性信息,Java虚拟机运行时会忽略掉它不认识的属性。为了能正确地解析Class文件,《Java虚拟机规范...
分类:
编程语言 时间:
2014-12-13 16:34:35
阅读次数:
276
在JDK1.2以前,Java中的引用定义得很传统:如果reference类型的数值代表的是另外一块内存的起始地址,就称这块内存代表中一个引用。这种定义很纯粹,但太过狭隘,一个对象在这种定义下只有被引用或者没有引用两种状态,对于如何描述一个“食之无味,弃之可惜”的对象就显得无能为力;如果内存在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。很多系统的缓存功能都符合这样的应用场景。
在JDK1...
分类:
编程语言 时间:
2014-12-13 16:34:10
阅读次数:
274
方法表的结构与字段表一样,依次包含了访问标志(access_flags),名称索引(name_index),描述符索引(descriptor_index),属性表集合(attributes)几项,如下表所示:
因为volatile关键字和transient关键字不能修改方法,所以方法表的访问标志中没有了ACC_VOLATILE与ACC_TRANSIENT标志。与之相对的,synchroniz...
分类:
编程语言 时间:
2014-12-13 12:17:54
阅读次数:
177
字段表(field_info)用于描述接口或类中声明的变量。字段(field)包括了类级变量或实例变量,但不包括方法内部声明的变量。描述一个字段的信息有:字段的作用域(public,private,protected修饰符),是类级变量还是实例级变量(static修饰符),可变性(final),并发可见性(volatile修饰符,是否强制从主内存读写),是否可序列化(transient修饰符),字...
分类:
编程语言 时间:
2014-12-12 22:13:27
阅读次数:
298
第7章 虚拟机类加载机制类的加载的时机加载 Loading, 连接 Linking(验证 Verfiication, 准备Preparation, 解析 Resolution) 初始化 Initialization, 使用Using和卸载 Unloading类加载的过程:1,加载: 加载是“类加载....
分类:
编程语言 时间:
2014-12-11 23:42:12
阅读次数:
194
类索引(this_class)和父类索引(super_class)都是u2类型的数据,而接口索引(interfaces)是一组u2类型的数据集合,class文件中由这三项数据来确定这个类的继承关系。类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。由于Java语言不允许多继承,所以父类索引只有一个,除了java.lang.Object之外,所有的Java类都有父类,因了除了j...
分类:
编程语言 时间:
2014-12-11 22:30:47
阅读次数:
196
魔数
每个class文件的头4个字节称为魔数(Magic Number),其值为:0xCAFEBASE,它的唯一作用是用于确定这个文件是否为一个能被虚拟机接受的class文件。使用魔数而不是扩展名来进行识别主要是基于安全的考虑,因为文件的扩展名可以随意地被改动。
版本号
紧接着魔的4个字节存储的是class文件的版本号:第5和第6个字节是次版本号(Minor Version)...
分类:
编程语言 时间:
2014-12-11 17:31:34
阅读次数:
194
class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格紧凑地排列在class文件中,中间没有任何分隔符。当遇到需要占用8位字节以上的的数据项时,则会按照高位在前的方式侵害成若干个8位字节进行存储。
根据Java虚拟机规范的规定,class文件格式采用一种类似于C语言结构体的伪结构来存储,这种伪结构只有两种数据类型:无符号数和表。无符号数属于基于数据类型,以u1、u2、u4、u...
分类:
编程语言 时间:
2014-12-11 14:01:42
阅读次数:
251