一、classloader
1.什么是类加载器?
ClassLoader就是用来动态加载.class文件到内存当中的
2.类加载器的类型
站在程序员的角度
BootStrap ClassLoader[启动类加载器](负责加载放在我们JDK-lir目录下的一个文件.是一个能够被虚拟机识别的类) 不继承classLoader这个抽象类,它的底层是由C++编写的
Extension ClassLoader[扩展类加载器](负载加载在jrn目录下的txt的目录)
App ClassLoader[应用程序加载器](负载加载用户路径下所生成的类)
站在Java虚拟机的角度
启动类加载器:使用的是C++来实现的,是我们虚拟机自身的一部分,是一个特别底层的加载器.
所有其他的类加载器:使用的是Java语言来实现的(AppClassLoader,Extension ClassLoader)是独立我们信息之外的,继承我们ClassLoader这个抽象类,这些类加载器加载到服务器之后才能去加载其他的类.
3.双亲委托模型
双亲委托模型图由上至下进行检查
所有的类加载器请求最终都要被传到顶层的启动类加载器中,只有类加载器在他的搜索范围之内,没有找到它所需要的类时,子加载器才会尝试去加载这个类.
使用双亲委托模型,它可以组织类加载器之间的关系.有一个很明显的好处就是保护Java程序的稳定性
4.类加载的过程
类加载过程的生命周期第一步-加载
1) 通过一个类的全限定名来获取其定义的二进制字节流
2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3) 在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口
第二步-验证
1) 为了确保Class文件中的字节流包含的信息符合当前虚拟机的要求
2) 文件格式的验证、元数据的验证、字节码验证和符号引用验证
第三步-准备
1) 对基本数据类型
2) 对于同时被static 和 final 修饰的常量
3) 对于引用数据类型reference
4) 在数组初始化时
第四步-解析
解析流程图1)类或接口的解析
2)字段解析
3)类方法解析
4)接口方法解析
第五步-初始化
初始化阶段是执行类构造器()方法的过程
网友评论