双亲委派模型

发布时间 2023-04-24 08:17:41作者: HexThinking

在Java中,双亲委派模型是一种类加载机制。当一个类需要被加载时,首先会委托父类加载器去查找是否已经加载过该类。如果父类加载器能够找到并加载该类,则直接返回该类的Class对象;否则,就将该请求“下放”给子类加载器去处理。

这个过程会一直向下递归,直到顶层的启动类加载器。如果该类在所有的加载器中都没有找到,则会抛出ClassNotFoundException异常。

这种类加载机制的好处在于,可以有效地避免同名的类文件被重复加载,从而降低了系统资源的浪费。同时,由于父类加载器加载的类能够被子类加载器所共享,也保证了类的安全性和稳定性。

总之,Java中的双亲委派模型实现了Java字节码的动态加载和隔离,是保证Java应用程序安全、稳定运行的重要机制之一。

此双亲委派模型的顶层父类加载器是启动类加载器(Bootstrap ClassLoader),它是由JVM本身实现的,用于加载核心库(如rt.jar)等。接下来依次是扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader或System ClassLoader),它们也是由JVM提供的默认实现。

扩展类加载器用于加载Java平台的扩展库(如jce.jar),而应用程序类加载器则用于加载应用程序的classpath路径下的类(如自定义的Java代码)。在这个过程中,如果需要加载一个类,就会先委托给上一级父类加载器,直到到达顶层的启动类加载器。

如果所有的父类加载器都无法找到该类,那么就会由当前类加载器来尝试加载该类。这样就保证了不同的类被加载器加载后具有独立的命名空间,从而避免了类之间的冲突和混乱。

总之,Java中的双亲委派模型是由JVM提供的一种类加载机制,它通过一定的规则来委派不同的类加载器去加载类文件,从而保证类的安全性和稳定性。