JVM中存在三个默认的类加载器: bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 BootStrapClassLoader是ExtClassLoader的⽗类加载器,默认负责加载%JAVA_HOME%lib下的 jar包和class⽂件。 ExtClassLoader是
JVM中存在三个默认的类加载器: bootstrap ClassLoader、ExtClassLoader、AppClassLoader。
- BootStrapClassLoader是ExtClassLoader的⽗类加载器,默认负责加载%JAVA_HOME%lib下的 jar包和class⽂件。
- ExtClassLoader是AppClassLoader的⽗类加载器,负责加载%JAVA_HOME%/lib/ext⽂件夹下的 jar包和class类。
- AppClassLoader是⾃定义类加载器的⽗类,负责加载classpath下的类⽂件。
AppClassLoader的⽗加载器是ExtClassLoader,ExtClassLoader的⽗加载器是 BootstrapClassLoader。
双亲委派原理:
- 如果一个类加载器收到类加载请求,它并不会自己先去加载,而是把这个请求委托给父类加载器去执行。
- 如果父类还存在父类,则进一步委托,依次递归,直到到达启动类加载器。
- 如果父类加载器能完成,则成功返回,不能完成则子类才会尝试自己去加载。
双亲委派优点:
- 避免类的重复加载
- 避免了java的核心API被篡改
双亲委派机制其他文章推荐