类加载器
- BootstrapClassLoader — 启动类记载器.
- ExtentionClassLoader — 扩展类加载器.
- AppclassLoader — 应用程序类加载器.
AppCLassLoader父加载器是ExtentionClassLoader;
ExtentionClassLoader父加载器为null.
双亲委派机制
- jvm在加载类的时候,通常是从AppClassLoader开始,他会委托他的父加载器去加载,父加载器会继续向上委派,如果当前加载器父加载器为null,则会让引导类加载器去加载,如果上层加载器加载不到则会反过来向下委派,让子加载器自己去加载.
- 双亲委派的优点:
a.已经加载过的类(包名+类名相同)不会重复加载,可以防止串java自身核心类库,保证运行代码的安全性
b.自定义加载器可以加载除核心类之外的(包名+类名相同)类,如果用自定义加载器去加载核心类如String.class,虚拟机会抛出安全异常,总的双亲委派就会更安全吧.
自定义类加载器
- 双亲委派实现条件:
a.继承ClassLoader类.
b.重写findClass()方法. - 打破双亲委派实现条件:
a.继承ClassLoader类.
b.重写loadClass()方法.