学IT推荐去达内教育,开设的课程:目前开设Java、Java互联网架构、JAVA大数据、PHP、软件测试、嵌入式、C++、C#、Android、iOS、UID、UED、产品经理、Linux云计算、Python、Web前端、VR、VFX影视视效设计师、CAD、网络运维、网络营销、电商、主办会计、少儿编程、智能机器人编程、编程数学等2课程体系,为IT企业提供全面的人才服务,并为全行业提供应用型人才。

Java类加载的过程
Java类加载过程主要分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载;其中加载是通过一个类的全限定名加载该类对应的二进制字节流,主要通过类加载器实现。
1、加载
1)通过一个类的全限定名加载该类对应的二进制字节流。主要通过类加载器实现。
2)将字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区各个类访问该类的入口。(Hotspot 在方法区生成该类)。
2、验证
1)文件格式验证:验证类文件的魔术版本号常量等是否符合当前虚拟机支持的范围。
2)元数据验证:验证类的语义信息,是否符合java语言规范的要求。
3)字节码验证:验证程序语义是合法的、合乎规范的。主要通过stackmapframe结构。
4)符号引用验证:虚拟机在将符号引用转化为直接引用,验证符号引用全限定名代表的类是否能够找到,对应的域和方法是否能找到,访问权限是否合法。
3、准备
准备阶段主要是将类变量(被static修饰符修饰)在方法区进行内存分配并进行初始化。
4、解析
1)类或接口解析:将符合引用转化为类的直接引用,并检查访问权限。
2)字段解析:将字段的符号引用转化为字段所属的类信息或其父类该字段的直接引用,并检查访问权限。
3)类方法解析:将类方法的符号引用转化为类方法所属的类信息或其父类该字段的直接引用,并检查访问权限。
4)接口方法解析:将接口方法的符号引用转化为接口方法所属的接口信息或其父类该字段的直接引用,并检查访问权限。
5、初始化
初始化阶段编译器会将类文件声明的静态赋值变量和静态区域合并生成方法并进行调用。
类加载器:类加载器是“通过一个类的全限定名加载这个类的二进制字节流”的实现,对于任何一个类,都是由类加载器和该类的本身共同确定在虚拟机中的性。
双亲委托模型采用这样的方式加载类:当类加载器收到加载类请求时,首先委托父类加载该类,所有类加载器都采用这种方式,因此所有类加载请求都会到达顶层父类,父类加载不到时再使用该类加载器中加载。
这样,类加载器之间就有了一种层级关系,能够增加Java的基础类由相同的类加载器加载,对Java系统的稳定性起到至关重要的作用。

微信扫码关注公众号
获取更多考试热门资料