类加载的双亲委派机制

6 篇文章 0 订阅

1、双亲委派机制的作用

  1. 保证类加载的安全性 :通过双亲委派机制避免恶意代码替换JDK中的核心类库,比如java.lang.String,确保核心类库的完整性和安全性。
  2. 避免重复加载:双亲委派机制可以避免同一个类被多次加载    

2、双亲委派机制

双亲委派机制指的是:当一个类加载器接收到加载类的任务时,会自底向上查找是否加载过,再由顶向下进行加载。

  • 每个类加载器都有一个父类加载器,在类加载的过程中,每个类加载器都会先检查是否已经加载了该类,如果已经加载则直接返回,否则会将加载请求委派给父类加载器。
  • 向上查找如果已经加载过,就直接返回Class对象,加载过程结束。这样就能避免一个类重复加载。
  • 如果所有的父类加载器都无法加载该类,则由当前类加载器自己尝试加载。所以看上去是自顶向下尝试加载。
  • 第二次再去加载相同的类,仍然会向上进行委派,如果某个类加载器加载过就会直接返回。
  • 向下委派加载起到了一个加载优先级的作用。
  • 每个Java实现的类加载器中保存了一个成员变量叫“父”(Parent)类加载器,可以理解为它的上级,并不是继承关系。
  • 应用程序类加载器的parent父类加载器是扩展类加载器,而扩展类加载器的parent是空,但是在代码逻辑上,扩展类加载器依然会把启动类加载器当成父类加载器处理。启动类加载器使用C++编写,没有父类加载器。

3、在Java中如何使用代码的方式去主动加载一个类呢?

  • 方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。
  • 方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。例如:
//获取main方法所在类的类加载器,应用程序类加载器
ClassLoader classLoader = Demo1.class.getClassLoader(); 
System.out.println(classLoader);

//使用应用程序类加载器加载com.test.my.A
Class<?> clazz = classLoader.loadClass(name:"com.test.my.A"); 
System.out.print1n(clazz.getClassLoader());

4、面试回答

类的双亲委派机制是什么?

  1. 当一个类加载器去加载某个类的时候,会自底向上查找是否加载过,如果加载过就直接返回,如果一直到最顶层的类加载器都没有加载,再由顶向下进行加载。
  2. 应用程序类加载器的父类加载器是扩展类加载器,扩展类加载器的父类加载器是启动类加载器。
  3. 双亲委派机制的好处有两点:第一是避免恶意代码替换JDK中的核心类库,比如 java.lang.String,确保核心类库的完整性和安全性。第二是避免一个类重复地被加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值