JVM中的双亲委派模型是一种类加载机制,用于保证Java类的安全性和一致性。该模型是通过委派机制来实现的,主要分为以下几个步骤:

  1. 委派: 当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载,而是将请求委派给父类加载器去完成。每个类加载器都会将加载请求向上委派给其父类加载器,直至委派到顶层的启动类加载器。
  2. 查找: 如果父类加载器能够完成类加载任务,就成功返回;如果不能完成,子加载器才会尝试自己去加载。这样保证了类加载的顺序从上到下,避免了类的重复加载。
  3. 加载: 当一个类加载器在委派链上的所有加载器都无法完成类加载任务时,最终该类加载器会尝试自己去加载类。这一步是委派模型的最后一步,如果仍然无法完成加载,将抛出ClassNotFoundException

通过双亲委派模型,JVM实现了以下好处:

  • 安全性: 避免了类的重复加载,防止恶意类的替代,保证了类的一致性和安全性。
  • 一致性: 由于类加载是从上到下的委派链,可以确保系统中的所有类都是由同一个类加载器加载的,保证了类的一致性。
  • 避免冲突: 当父类加载器已经加载了一个类时,子类加载器再次加载同一类时,父类加载器已加载的类将被直接返回,避免了类的冲突。
  • 节省资源: 避免了重复加载,节省了系统资源。

在Java中,有三个主要的类加载器,它们按照双亲委派模型的顺序依次为:

  1. 启动类加载器(Bootstrap Class Loader): 由C++实现,负责加载Java核心类库(如java.lang包)。
  2. 扩展类加载器(Extension Class Loader): 负责加载Java的扩展类库,一般对应jre/lib/ext目录中的jar包。
  3. 应用程序类加载器(Application Class Loader): 也叫系统类加载器,负责加载应用程序的类路径上的类。是最常用的类加载器。

通过这种双亲委派模型,类加载器形成了一条层次结构,保证了类的加载按照一定的规则和顺序进行,确保了类的安全性和一致性。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.