JVM 双亲委派机制
什么是双亲委派:如果一个类加载器收到了加载类的请求,首先会当前类加载器看看自己有没有加载过,没有就传递给上一层,如果找到了就返回,假设此类没有被加载过,那么他一层一层传递直到根目录类加载器,父类尝试去加载,父类加载器目录下没有这个类,反馈给子类,让子类尝试去加载。
双亲委派机制避免重复加载 ,核心类篡改。
这里有几个流程要注意一下:
子类先委托父类加载
父类加载器有自己的加载范围,范围内没有找到,则不加载,并返回给子类
子类在收到父类无法加载的时候,才会自己去加载
jvm提供了三种系统加载器:
启动类加载器(Bootstrap ClassLoader):C++实现,在java里无法获取,负责加载<JAVA_HOME>/lib下的类。
扩展类加载器(Extension ClassLoader): Java实现,可以在java里获取,负责加载<JAVA_HOME>/lib/ext下的类。
系统类加载器/应用程序类加载器(Application ClassLoader):是与我们接触对多的类加载器,我们写的代码默认就是由它来加载,ClassLoader.getSystemClassLoader返回的就是它。