虚拟机加载机制
Posted 背时的哥哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟机加载机制相关的知识,希望对你有一定的参考价值。
1.类加载的过程
一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载,验证,准备,解析,初始化,使用和卸载七个阶段;
1.加载
加载阶段是整个类加载过程中的一个阶段。在加载阶段虚拟机需要完成:
①通过一个类的全限定名来获取定义此类的二进制字节流;
②将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
③在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口;
2.验证
验证是连接阶段的第一步,这一阶段的目的是确保Class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求,保证这些信息都被当做运行后不会危害虚拟机的自身安全;
具体包含文件格式验证,元数据验证,字节码验证,符号验证四个阶段;
3.准备
准备阶段是正式为类中定义的变量(即静态变量)分配内存并设置初始值的阶段;
4.解析
解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程;
5.初始化
初始化阶段就是执行类构造器方法的过程;
①()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序决定的。(静态语句块只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的语句块可以赋值,但不能访问)
②()方法与类的构造函数不同,它不需要显示地调用父类构造器,Java虚拟机会保证在子类的()方法执行之前,父类的()方法已经执行完毕;
③Java虚拟机必须保证一个类的()方法在多线程环境中被正确的加锁同步;
2.类加载器
实现类的加载动作;
1.类与类加载器
对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间;
2.双亲委派模型
以上是关于虚拟机加载机制的主要内容,如果未能解决你的问题,请参考以下文章