深入Java虚拟机-类装载器-讲06
.class 装载验证流程
.什么是类装载器ClassLoader
。JDK中ClassLoader默认设计模式
.打破常规模式
.热替换
1.class文件的装载验证流程
加载---> 链接---> 初始化
1.加载
2.链接
- 验证
-准备
-解析
3.初始化
加载的概述: 加载是第一个阶段,它会才从class文件中,读取类的二进制流,然后转到方法区中
生成相应的数据结构,最后在Java堆中生成对应的java.lang.Class对象。
链接 :
- 验证
-准备
:
分配内存,并为类设置初始值(方法区中)
对于static final 类型,在准备阶段就会别赋上正确的类型。
-解析:
链接的第三步是解析:就是将符号引用解析为直接引用
符号引用就是一个字符串,用以表示某一个类的名称,如:java.lang.Object
(
符号引用,字符串,引用对象不一定被加载。
直接引用,指针或者地址偏移量,引用对象一定在内存。
)
-初始化时期:
执行类构造器,如静态变量赋值语句,static{}语句
子类的类初始化调用前保证父类的类初始化被调用。
初始化是线程安全的。
2.什么是类装载器ClassLoader ???
:
它只负责把class文件读进来。
.ClassLoader 是一个抽象类
.ClassLoader的实例将读入Java字节码将类装载到JVM中。
.ClassLoader可以定制,满足不同的字节码流获取方式
.ClassLoader负责类装载过程中的加载阶段。
JDK中ClassLoader默认设计模式:
-public Class<?> loadClass(String name) throws ClassNotFoundException
.载入并返回一个class
-protected final Class<?> defineClass(byte[] b,int off,int len);
.定义一个类,不公开调用
-protected Class<?> findClass(String name) throws ClassNotFoundException
.loadClass回调该方法,自定义ClassLoader的推荐做法。
-protected final Class<?> findLoaded(String name)
.寻找已经加载的类。
3.
3.
|
|