java类的加载机制

来源:互联网 发布:prism.js 使用 编辑:程序博客网 时间:2024/06/14 10:20

java 类从加载到虚拟机到卸载经历加载,验证、准备、解析、初始化、使用和卸载这几个步骤,如下所示:

一、加载:这个阶段的主要任务把类按照虚拟机的规范装载到内存中,主要做了一下几件事情:

1、根据类的全名来获取定义此类的二进制字节流;

2、将字节流所代表的的静态存储机构转变为方法区的运行时数据结构,例如类信息(java运行时版本信息,java环境供应商等信息)、常量、静态变量,数据类型等;

3、在内存中生成代表这个类java.lang.Class对象,作为方法区中这个类各种数据或方法的访问入口;

二、验证:这一步的目的是class文件包含的字节流符合虚拟机的规范,如果不符合可能会危害虚拟机的安全,也可能会导致虚拟机崩溃,具体的验证信息包括:文件格式,元数据验证(例如:这个类是否有父类,类的方法是否和父类的方法冲突等),字节码验证(数据流和控制流是否符合语法等),符号验证(例如:符号引用中通过字符串描述的全限定名是否能找到对应的类;符号引用的类的方法,字段,方法的访问性)

三、准备:是正式为变量分配内存并设置初始值,此时的变量主要是类变量,不是实例变量,例如:类变量是否static修饰;数据类型的零值,包括int,byte,long等基本类型;其实就是对static 和基本数据类型进行初始化操作;

四、解析:将符号引用转变直接引用的过程,直接引用就是直接指向目标的指针;

五、初始化:就是执行类中的程序代码,更准确地说是初始化阶段就是执行类构造器方法的过程。java虚拟机会保证在执行子类的构造方法时,父类呃构造方法已经被执行

六、使用,

七、卸载;