JVM学习-ClassLoader
1.ClassLoader是什么
java中的类编译以后都是以字节码.class的方式保存的,一个java类要执行,必须由java虚拟机将这个字节码文件加载到内存中,ClassLoader就是负责装载字节码类的。
2.ClassLoader的装载顺序
加载:查找并加载类的二进制数据(.class字节码文件)
连接:
a.验证:确保加载类的正确性
b.准备:为类的静态变量分配内存,并赋予默认值
c.解析:为类中的符号引用转化为直接引用
初始化:为类的静态变量赋予正确的初始值
3.java对类的使用形式分为主动形式和被动形式
主动形式:所有java虚拟机实现,必须在每个类或接口被首次使用的时候才被加载进来,分为以下6中形式
a.创建类的实例 new Test();
b.访问某个类或接口的静态变量或为其赋值 Test.a = 123; int b = Test.a;
c.调用类的静态方法 Test.run();
d.反射 Class.forName
e.初始化一类的子类
f.java虚拟机启动时被标明启动类的类java Test
4.ClassLoader加载.class的方式
a.从本地系统中加载
b.从网络文件中加载
c.从zip,jar归档文件中加载
d.从专有数据库中加载.calss文件(不常见)
e.将java源文件动态编译成.class文件
5.classLoader的分类
java虚拟机自带的类加载器
a.根类加载器BootStrap c++实现
b.扩展类加载器Extension java实现
c.系统类加载器System java实现
用户自定义类加载器
a.java.lang.ClassLoader的子类
b.用户定制的类加载器