类加载器应用场景
企业级应用:SPI机制 类的热部署 Tomcat类的隔离
面试题:什么事双亲委派 打破类双亲委派 自定义类加载器
解决先上问题:使用Arthas不停机 解决线上故障
类加载器分类
1 启动类加载器 Bootstrap ClassLoader 加载核心类
2 扩展类加载器 Extension ClassLoader 加载扩展类 …/ext/…jar
3 应用程序类加载器 Application ClassLoader 加载应用classpath中的类
4 自定义类加载器 重写findClass方法
5 JDK9及以后得扩展类加载器变成了平台类加载器 Playform ClassLoader


双亲委派机制
核心:自底向上查找(是否被加载过) 自顶向下尝试加载
1、双亲委派机制用处:
1 保证类加载的安全性: 避免恶意代码替换jdk中核心类库,确保核心类库完整性和安全性
2 避免重复加载: 可以避免同一个类多次加载
2、加载流程

3、防止核心类被篡改案例

面试题
1、类的双亲委派机制是什么?
1、当一个类加载器去加载某个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再自顶向下加载(尝试进行加载)。
2、 应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类加载器是启动类加载器。
3、双亲委派机制的好处有两点:
第一是避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性。
第二是避免一个类重复地被加载 (因为自底向上查找 若有则不会被重复加载 直接返回)
打破双亲委派机制※

1、自定义类加载器※
继承ClassLoader并重写loadClass方法 可以去除双亲委派机制
(如果只想自定义加载器 重写findClass方法就好 不会破坏双亲委派机制 loadClass方法里调用了findClass方法)
2、线程上下文类加载器


JDK8之后的类加载器
扩展类加载器被替换成平台类加载器 platform class loader
平台类加载器的存在是为了兼容老版本的设计方案 自身没有特殊逻辑