一、类加载子系统的作用
1.类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。
2.ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定。
3.加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字而量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)
二、类加载子系统ClassLoader角色
1.class文件存放在本低硬盘上,通过类加载器加载到jvm中,如何可以根据这个文件实例化出n个一模一样的实例
2.class文件加载到jvm中,被称为DNA元数据模板,放在方法区。
三、类的加载过程
1.通过一个类的全限定名获取定义此类的二进制字节流
2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在内存中生成一个代表这个类的java . lang. Class对象,作为方法区这个类的各种数据的访问入口
四、链接阶段
验证:判断字节流文件是否符合虚拟机要求,保证其正确性,主要包括四种验证阶段,文件格式验证,元数据验证,字节码验证,符号引用验证。
准备:为类变量分配内存并初始化为零值,final修饰的类变量除外,其在编译之前就已经赋值。
解析:将常量池中的符号引用转换为直接引用。
五、初始化阶段
执行类构造器方法clinit()的过程
六、类加载器
jvm支持俩种类型的类加载器,分别是引导类加载器和自定义类加载器,引导类加载器是由C/C++编写,自定义类加载器是派生于抽象类classloader的类,其中自定义加载器常见的为扩展类加载器和系统类加载器。
七、为什么要自定义类加载器?
隔离加载类
修改加载方式
扩展加载源
防止源码泄露