【JVM】双亲委派机制

       📝个人主页:五敷有你      

 🔥系列专栏:JVM

⛺️稳中求进,晒太阳

双亲委派机制

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

  • 方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。
  • 方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载

在Idea中测试下面的案例:

双亲委派机制:

当一个类加载器接受到加载类的任务时,会自底向上查找是否加载过,在由顶向下进行加载

问题

如果一个类重复出现三各类加载器的加载位置,应该由谁来加载呢?

启动类加载器,根据双亲委派机制,它的优先级是最高的。

String类能否被覆盖?

不能,会返回启动类加载器在rt.jar包中的String类

 

  • 应用程序类加载器parent父类加载器是扩展类加载器,而扩展类加载器的parent是空,但是在代码逻辑上,扩展类加加载器依然会把启动类加载器当成父类加载器处理
  • 启动类加载器使用C++编写,没有父类加载器

使用arthas来看类加载器 classloader -t

面试

类的双亲委派机制是什么

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

相关推荐

  1. JVM双亲委派机制

    2024-02-20 22:22:02       41 阅读
  2. JVM双亲委派模型

    2024-02-20 22:22:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-20 22:22:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-20 22:22:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-20 22:22:02       87 阅读
  4. Python语言-面向对象

    2024-02-20 22:22:02       96 阅读

热门阅读

  1. Git面试题整理(基本点)

    2024-02-20 22:22:02       44 阅读
  2. centos8安装docker docker compose

    2024-02-20 22:22:02       53 阅读
  3. 用Dockerfile创建PostgreSQL数据库

    2024-02-20 22:22:02       53 阅读
  4. 习题2.3 old bill

    2024-02-20 22:22:02       46 阅读
  5. Python 实现Excel 文件合并

    2024-02-20 22:22:02       67 阅读
  6. 2024年刷题记录

    2024-02-20 22:22:02       58 阅读
  7. 懒汉单例设计模式与饿汉单例设计模式

    2024-02-20 22:22:02       37 阅读
  8. 【算法训练营】等式,道路升级(c++,python实现)

    2024-02-20 22:22:02       50 阅读
  9. C语言 判断当前存储大小端问题

    2024-02-20 22:22:02       44 阅读
  10. MDC 日志跟踪笔记

    2024-02-20 22:22:02       46 阅读
  11. 汽车研发与制造中英文对照

    2024-02-20 22:22:02       55 阅读