Java为何采用双亲(父类)委派模型(也叫用代理模式加载相关的类)

  • Post author:
  • Post category:java


1.首先需要了解什么叫双亲(父类)委派模型?

java中存在3种类型的类加载器:引导类加载器,扩展类加载器和系统类加载器。三者是的关系是:引导类加载器是扩展类加载器的父类,扩展类加载器是系统类加载器的父类。

双亲(父类)委派模型: 某加载器   每次准备 加载类 的时候,都会先尝试委托 其 父类 加载器进行加载该类。

2.动机?

2.1 首先明确一点:jvm如何认定两个对象同属于一个类型,必须


同时


满足下面两个条件:

A.都是用同名的类完成实例化的。

B.两个实例各自对应的同名的类的加载器必须是同一个。比如两个相同名字的类,一个是用系统加载器加载的,一个扩展类加载器加载的,两个类生成的对象将被jvm认定为不同类型的对象。

2.2 所以,为了系统类的安全,类似“ java.lang.Object”这种核心类,jvm需要保证他们生成的对象都会被认定为同一种类型。即“通过代理模式,对于 Java 核心库的类的加载工作由引导类加载器来统一完成,保证了 Java 应用所使用的都是同一个版本的 Java 核心库的类,是互相兼容的”。

参考:

1.

《深入探讨 Java 类加载器》



版权声明:本文为zhouhuakang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。