前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解JVM(十)——类加载器

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

作者头像
大闲人柴毛毛
发布2018-03-09 17:46:47
7030
发布2018-03-09 17:46:47
举报
文章被收录于专栏:大闲人柴毛毛大闲人柴毛毛

类与类加载器

  • 类加载器的作用:将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对象;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年02月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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