类加载器
| Why | ![]() |
|---|---|
| Bootstrap | 让bootstrap加载自己写的jar包,1.放进lib 2.添加vm参数
|
Extension : /jre/lib/ext Application: classpath |
Extension:参数添加,要防止覆盖!!
|
双亲委派机制:谁来加载类 1.确保加载的安全 2.避免重复 执行: 向上传递,加载过直接返回. 都没加载过(ClassNotFound)遣返回去让他自己加载 注意此处的双亲是通过 聚合内置parent, 而不是extends 流程: 1.super.loadClass() 2.this.findClass() 3.this.defineClass() 4.this.resolveClass() |
===========
双亲委派机制总结:
|
打破双亲委派机制: 1.自定义加载类:让不同的加载器加载同一个类 (正常我们只重写findClass,但不重写loadClass) 直接findClass,而不去super.loadClass() 2.线程上下文类加载器 必须打破: 由于java需要操作数据库 因此将jdbc的驱动DriverManager放在核心库来记载. 它负责管理 JDBC 驱动的注册和连接操作。 这个其实并没有打破双亲委派机制: JDBC 仍然需要走双亲委派机制本身的流程, 但通过“上下文类加载器”这一后门机制, 绕过了双亲委派机制原本带来的“命名空间隔离” |
继承abstract classLoader,会默认为其设置父类加载器为AppClassLoade 1.
2.ShouldKnow第2点
|
|---|---|
热部署 -c是通过类加载器, 这样可以找到其加载过的类来解决mc重编译的类可能需要的依赖 |
注意事项
|
| JDK9及其以后的类加载器 |
|
| 总结 |
|













