深入理解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 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列26-spring(5)-资源管理、与struts区别、核心等

Java面试系列26-spring(5)-资源管理、与struts区别、核心等 25.Spring如何实现资源管理? 使用applicationContext....

3125
来自专栏小二的折腾日记

服务器-Nginx的事件驱动模型

事件驱动概念:在持续的事物管理过程中,由当前时间节点上出现的事件引起的调用可用资源执行相关任务,解决问题,防止事物堆积的一种策略。 一般由:事件收集器、事件发送...

664
来自专栏程序你好

使用分布式缓存对ASP.Net Core性能提升?

981
来自专栏跟着阿笨一起玩NET

关于WinForm/Web如何使用缓存Cach

相对到期也称滑动到期:设置相对过期时间 指定时间内无访问会失效。(类似Session机制)

221
来自专栏性能与架构

JS中setTimeout是如何实现的

我们知道 Javascript引擎是单线程的,而setTimeout方法的作用是延后执行目标代码,同时还可以继续往下执行 setTimeout是如何实现的? 这...

3528
来自专栏余林丰

虚拟机类加载机制(2)——类加载器

《深入理解Java虚拟机》一书中将类的加载过程放到了类加载器前面一节,但在这里我想先讲“类加载器”。在上一篇类加载时机中我们用大量篇幅来讲解了类加载过程中的5个...

1936
来自专栏大内老A

ASP.NET Core管道深度剖析(4):管道是如何建立起来的?

在《管道是如何处理HTTP请求的?》中,我们对ASP.NET Core的请求处理管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管...

1686
来自专栏王磊的博客

ORM for Net主流框架汇总与效率测试

框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论)。 ORM框架:Obje...

2587
来自专栏圣杰的专栏

Parallel线程安全问题

废话不多说,上代码: using System; using System.Collections.Generic; using System.Threadin...

3055
来自专栏Java Edge

适配器模式1 动机2 模式定义3 模式结构4 时序图5 代码分析8 优点9 缺点10 适用环境11 模式应用12 模式扩展13 总结

1963

扫描关注云+社区