Java虚拟机中的双亲委派机制是一种类加载机制,用于保证类的唯一性和防止类的重复加载。这一机制主要有两个关键特点:双亲委派和委派机制。
-
双亲委派:
- 类加载器在加载类时,先委派给其父类加载器,由父类加载器尝试加载。如果父类加载器无法加载,再由子类加载器自己尝试加载。
- 这个过程一直递归到启动类加载器。如果启动类加载器也无法加载,则抛出
ClassNotFoundException
。 - 双亲委派机制的核心思想是,一个类由哪个类加载器加载,不仅与类本身有关,还与加载类的类加载器有关。
-
委派机制:
- 类加载器在接收到加载请求时,先检查是否已经加载过这个类。如果已经加载过,直接返回该类的
Class
对象。 - 如果没有加载过,先将加载请求委派给父类加载器。父类加载器按照同样的规则处理,检查是否已加载,如果已加载则返回。
- 如果所有父类加载器都无法加载,最终由子类加载器尝试加载。如果子类加载器加载成功,则返回
Class
对象;如果仍然失败,则抛出ClassNotFoundException
。
- 类加载器在接收到加载请求时,先检查是否已经加载过这个类。如果已经加载过,直接返回该类的
优势和原理:
- 避免类冲突: 通过双亲委派机制,Java核心类库由启动类加载器加载,保证了核心类库的唯一性,避免了用户自定义的类替代核心类库的情况。
- 安全性: 避免了恶意类的加载,保证了类的来源可靠性。
- 共享类: 通过双亲委派,父类加载器加载的类对子类加载器也是可见的,从而实现了类的共享。
总体来说,双亲委派机制是Java中一项非常重要的安全性和唯一性保障机制。当我们在编写自定义类加载器时,通常要继承自ClassLoader
类,并按照双亲委派的原则来实现加载逻辑。
Was this helpful?
0 / 0