双亲委派机制

        JVM对class文件的加载按照的是按需加载的方式,需要该类时才会将它的class文件加载到内存中生成它的Class类的对象,而加载此类的class文件时,JVM采用的是双亲委派机制,即把加载交由父加载器来完成,这是一种任务委派模式。

双亲委派机制_第1张图片

 

双亲委派机制的工作原理:

  • 如果一个类加载器收到了类加载的请求,它不会直接加载,而是交由父加载器去加载。

  • 如果父加载器还存在其父加载器,则继续向上委托,直到委托到引导类加载器。

  • 如果父加载器能够完成加载,则加载完后返回即可,如果不能完成,则子加载器才会去尝试加载,如果子加载器都加载失败了,则抛出ClassNotFoundException的异常。

举例:我们创建一个名叫java.lang的包,包下创建我们自己的String类,在main方法里面做输出,然后运行,看JVM会加载我们创建的String类还是会加载java核心类库中的String?

package java.lang;  //我们自己定义的包

public class String {
    public static void main(String[] args) {
        System.out.println("aaaa");
    }
}

 运行结果如下:

双亲委派机制_第2张图片

        这就表明JVM在加载时,由于双亲委派机制,从应用程序类加载器一直向上委托到了引导类加载器,然后引导类加载器去尝试加载结果成功加载了java核心类库中的String类,之后就直接返回了。

双亲委派的优点:

  1. 安全,可以避免用户自己编写的类替换Java原生的核心类库,如上面的java.lang.String。

  2. 避免类的重复加载,如果父类加载器已经加载了,子类的加载器就没必要再加载一次了。

 

你可能感兴趣的:(JVM,java,开发语言,jvm)