类加载器深入解析与阶段分解
1.类加载
-
在Java代码中,类型的加载、连接、初始化过程都是在运行期间完成的。
这里的类型指的是:object本身,并不是表示object对象。
这个类型大多数情况下载运行之前都是编辑好的,如:类jdk提供的object,也可以是在运行期间生成的,如:动态代理:在程序运行期间创建的。
-
提供了更大的灵活性,增加了更多的可能性。
2.类加载器深入剖析
每一个类都是由类加载器加载到内存当中的。
- Java虚拟机与程序的生命周期
- 在如下几种情况下,Java虚拟机将结束生命周期:
- 执行了System.exit()方法;
- 程序正常执行结束;
- 程序在执行过程中遇到了异常或者错误而异常终止;[就是异常一直往外抛,抛到main方法,就结束啦!]
- 由于操作不当出现错误而导致Java虚拟机进程终止。
3.类的加载、连接与初始化
-
加载:查找并加载类的二进制数据。
就是把类的class文件加载到内存中。
-
连接:
-
验证:确保被加载的类的正确性;
就是验证字节码的格式,字节码没有被恶意的篡改,符合JVM对于字节码的格式要求。
-
准备:为类的静态变量分配内存,并将其初始化为默认值;
在这个阶段,为类的静态变量开辟内存区域,类还不存在对象。而设置为默认值,如:int变量的默认值为 0 ,boolean的默认值为 false,引用的默认值为null。
-
解析:把类中的符号引用转换为直接引用。
int a = 3; int b = a;
-
-
初始化:为类的静态变量赋予正确的初始值。
如:int a = 3; 在连接的准备期间,赋予的是默认值 a = 0 ,初始化阶段,就赋予正确的初始值 a = 3
4.类的使用与卸载
-
使用
如:类的创建对象, 调用类的一些相关方法。
-
卸载
从内存中卸载,再想使用,需要重新加载到内存中。