Java虚拟机(三)—类加载

2018-11-05  本文已影响12人  小吵闹123

类加载时机

生命周期

加载 -> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载

类加载过程

加载

在加载阶段虚拟机需要完成以下三件事

验证

验证是为了确保class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会对虚拟机产生危害,主要有以下过程

准备

准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配,这时候分配的类变量,不包括实例变量,实例变量将会在类初始化的时候一起分配到Java堆中。但是,如果类字段的字段属性在ConstantValue中存在,那么在准备阶段就会陪变量赋值。

解析

解析是虚拟机讲常量池内的符号引用替换为直接引用的过程

解析主要针对类或接口、字段、类方法、接口方法等四类符号进行引用,分别对应常量池的CONSTANT_Class_info、Constant_Fieldref_info、CONSTANT_Methodref_info和CONSTANT_InterfaceMethodref_info

初始化

初始化变量和其它资源,是执行构造器方法<cInit>()的过程

类加载器

双亲委派模型

Java虚拟机理论上存在两种类

绝大多数Java程序分为下面三种加载器

ps: Android的ClassLoader默认只有BootClassLoader和PathClassLoader,PathClassLoader与Application ClassLoader类似,都是加载程序中的类的加载器,具体参考这里

双亲委派的优点

参考

上一篇下一篇

猜你喜欢

热点阅读