Java的类加载过程是什么样子的?Java类的生命周期是什么样子的
分成357,3个阶段,5个步骤,7个小结
可以看成三个阶段: 加载->连接->初始化
5个步骤,其中因为 连接可以分成:验证->准备->解析。所以加上 前面的加载和后面的初始化,就是 加载-验证-准备-解析-初始化
7个小结,初始化之后还需要使用和卸载。因此就是 加载-验证-准备-解析-初始化-使用-卸载
每个阶段都是干啥的
加载: 首先第一件是事情就是把 .class文件放到内存里面
所为连接,连接的就是 .class 和 Class 的过程,连接完成了,Class也就放到内存里面了。所以 .class 加载到内存里面了,得先看看 这个class文件写的对不对,也就是验证,如果写的不对,那就直接报错就好了,如果写的没问题,接下来就是在方法区里面分配空间了,因为马上就要创建Class了,得先准备准备吧,准备好了就是解析了,解析的目的就是把能把符号引用转换成直接引用的地方都转换成直接引用。
初始化其实就是赋值的过程,按照顺序执行静态变量的赋值过程和静态代码块儿的代码。到此一个对象的DNA就好了。
使用就是new
卸载就是这个类不在使用的时候从方法区里面移除的过程,不过这个移除的过程比较苛刻。
什么是双亲委派
如何打破双亲委派
只要继承ClassLoader类,然后重写findClass 和 loadClass 就行。如果只重写findClass就是为了接入双亲委派。
为什么要打破双亲委派
- Tomcat 要求应用之间隔离
- 热部署 要求一个类变了之后需要重新加载