前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM学习笔记(二)类加载器及双亲委派机制

JVM学习笔记(二)类加载器及双亲委派机制

作者头像
glm233
发布2021-03-02 15:06:46
2790
发布2021-03-02 15:06:46
举报
文章被收录于专栏:glm的全栈学习之路

3、类加载器

作用:加载Class文件。

  • 1、虚拟机自带的加载器
  • 2、启动类(根)加载器【BOOT】
  • 3、扩展类加载器【EXT】
  • 4、应用程序加载器【APP】

注:从4到1进行加载

1、双亲委派

解释:双亲委派机制(安全):APP—>EXT—>BOOTSTRAP【最终执行】

  1. 类加载器收到类加载的请求
  2. 将这个请求向上委托为父类加载器去完成,一直向上委托,直到启动类加载器
  3. 启动类加载器检查是否能够加载当前的这个类,能加载就结束,使用当前的加载器,否则抛出异常,通知子加载器进行加载
  4. 重复步骤 3

但是BOOT根加载器输出是null,这是java调用不到~ C,C++ Java = C++-- :去掉繁琐的东西(指针、内存管理等)

代码语言:javascript
复制
package com.draco.parents;
​
/**
 * 双亲委派机制
 */
public class Car {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
        Car car3 = new Car();
​
        //不同的实例
        System.out.println("car1 hashCode="+car1.hashCode());
        System.out.println("car2 hashCode="+car2.hashCode());
        System.out.println("car3 hashCode="+car3.hashCode());
​
        //同一个类模版
        Class<? extends Car> aClass1 = car1.getClass();
        Class<? extends Car> aClass2 = car2.getClass();
        Class<? extends Car> aClass3 = car3.getClass();
​
        System.out.println("aClass1 hashCode="+aClass1.hashCode());
        System.out.println("aClass2 hashCode="+aClass2.hashCode());
        System.out.println("aClass3 hashCode="+aClass3.hashCode());
​
        //由于类模版都是一个,以下就选择一个进行测试
        ClassLoader classLoader = aClass1.getClassLoader();
​
        System.out.println(classLoader);  //AppClassLoader
​
        System.out.println(classLoader.getParent());  //ExtClassLoader  所在位置:\jre\lib\ext
​
        System.out.println(classLoader.getParent().getParent());  //null 1.不存在  2.java程序获取不到  所在位置:rt.jar
​
    }
}
​
代码语言:javascript
复制
  • 运行测试结果:

2、面试问题

  • 为什么需要双亲委派机制?(也就是双亲委派的优点) ①双亲委派机制使得类加载出现层级,父类加载器加载过的类,子类加载器不会重复加载,可以防止类重复加载; ②使得类的加载出现优先级,防止了核心API被篡改,提升了安全,所以越基础的类就会越上层进行加载,反而一般自己的写的类,就会在应用程序加载器(Application)直接加载。
  • 如何打破双亲委派? ①自定义类加载器,重写loadClass方法 ②使用线程上下文类加载器
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3、类加载器
    • 1、双亲委派
      • 2、面试问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档