JVM中的双亲委派模型是一种类加载机制,用于保证Java类的安全性和一致性。该模型是通过委派机制来实现的,主要分为以下几个步骤:
- 委派: 当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载,而是将请求委派给父类加载器去完成。每个类加载器都会将加载请求向上委派给其父类加载器,直至委派到顶层的启动类加载器。
- 查找: 如果父类加载器能够完成类加载任务,就成功返回;如果不能完成,子加载器才会尝试自己去加载。这样保证了类加载的顺序从上到下,避免了类的重复加载。
-
加载: 当一个类加载器在委派链上的所有加载器都无法完成类加载任务时,最终该类加载器会尝试自己去加载类。这一步是委派模型的最后一步,如果仍然无法完成加载,将抛出
ClassNotFoundException
。
通过双亲委派模型,JVM实现了以下好处:
- 安全性: 避免了类的重复加载,防止恶意类的替代,保证了类的一致性和安全性。
- 一致性: 由于类加载是从上到下的委派链,可以确保系统中的所有类都是由同一个类加载器加载的,保证了类的一致性。
- 避免冲突: 当父类加载器已经加载了一个类时,子类加载器再次加载同一类时,父类加载器已加载的类将被直接返回,避免了类的冲突。
- 节省资源: 避免了重复加载,节省了系统资源。
在Java中,有三个主要的类加载器,它们按照双亲委派模型的顺序依次为:
-
启动类加载器(Bootstrap Class Loader): 由C++实现,负责加载Java核心类库(如
java.lang
包)。 -
扩展类加载器(Extension Class Loader): 负责加载Java的扩展类库,一般对应
jre/lib/ext
目录中的jar包。 - 应用程序类加载器(Application Class Loader): 也叫系统类加载器,负责加载应用程序的类路径上的类。是最常用的类加载器。
通过这种双亲委派模型,类加载器形成了一条层次结构,保证了类的加载按照一定的规则和顺序进行,确保了类的安全性和一致性。
Was this helpful?
0 / 0