专栏首页大闲人柴毛毛深入理解JVM(十)——类加载器

深入理解JVM(十)——类加载器

类与类加载器

  • 类加载器的作用:将class文件加载进JVM的方法区,并在方法区中创建一个java.lang.Class对象作为外界访问这个类的接口。
  • 类与类加载器的关系:比较两个类是否相等,只有当这两个类由同一个加载器加载才有意义;否则,即使同一个class文件被不同的类加载器加载,那这两个类必定不同,即通过类的Class对象的equals执行的结果必为false。

类加载器种类

JVM提供如下三种类加载器:

  • 启动类加载器 负责加载Java_Home\lib中的class文件。
  • 扩展类加载器 负责加载Java_Home\lib\ext目录下的class文件。
  • 应用程序类加载器 负责加载用户classpath下的class文件。

双亲委派模型

  • 工作过程:如果一个类加载器收到了加载类的请求,它首先将请求交由父类加载器加载;若父类加载器加载失败,当前类加载器才会自己加载类。
  • 作用:像java.lang.Object这些存放在rt.jar中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器加载,从而使得不同加载器加载的Object类都是同一个。
  • 原理:双亲委派模型的代码在java.lang.ClassLoader类中的loadClass函数中实现,其逻辑如下:
    • 首先检查类是否被加载;
    • 若未加载,则调用父类加载器的loadClass方法;
    • 若该方法抛出ClassNotFoundException异常,则表示父类加载器无法加载,则当前类加载器调用findClass加载类;
    • 若父类加载器可以加载,则直接返回Class对象;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入理解JVM(九)——类加载的过程

    通过之前的介绍可知,类加载过程共有5个步骤,分别是:加载、验证、准备、解析、初始化。其中,验证、准备、解析称为连接。下面详细介绍这5个过程JVM所做的工作。 加...

    大闲人柴毛毛
  • 张全蛋和李小花的故事——“代理模式”

    举个例子: 假设张全蛋喜欢上了李小花,张全蛋准备给李小花送一些礼物,但张全蛋又非常害羞,因此买了礼物之后让王尼玛代送。王尼玛跑到李小花把礼物送给她之后就走了。 ...

    大闲人柴毛毛
  • 深入理解JVM(八)——类加载的时机

    类的生命周期 一个类从加载进内存到卸载出内存为止,一共经历7个阶段: 加载——>验证——>准备——>解析——>初始化——>使用——>卸载 其中,类加载包括...

    大闲人柴毛毛
  • 由浅入深谈 Java 的类加载机制

    神秘的寇先森
  • 2.1 类加载器、 双亲委派模型 -《SSM深入解析与项目实战》

    上一章节中,对Spring、Spring MVC、MyBatis进行了一些简单的介绍,以及它们之间的分工合作。相信大家对于Spring、Spring MVC以及...

    谙忆
  • JVM学习笔记之类装载器-ClassLoader

    负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且Clas...

    凯哥Java
  • jvm类加载机制,双亲委派机制,看这一篇就够了

    今天我们来讲讲jvm里类加载的过程,我们写了那么多类,却不知道类的加载过程,岂不是很尴尬。

    IT老哥
  • ClassLoader的结构 与 双亲委派的加载链

    1.启动类加载器,用于加载Java API,加载<JAVA_HOME>\lib目录下的类库。

    用户7625070
  • java 类的加载

    加载是将class文件加载到 jvm内存,并为之创建一个大的Class,任何类被系统使用都会建立一个大Class对象。Class用来表示文件内容,成员变量,构...

    用户7625070
  • java类加载机制,再也不怕面试官的刁难

    上一篇我们详细的讲解了java 虚拟机的内存模型(),并且知道了我们写的代码分别是怎么存在JVM的哪个内存区域中。今天我们来看另一个重要的问题,类加载机制的核心...

    架构师修炼

扫码关注云+社区

领取腾讯云代金券