一、类加载过程

  • 装载
  • 链接
    • 验证
    • 准备
    • 解析
  • 初始化

二、类初始化情况

1)创建类的实例,也就是new一个对象

2)访问某个类或接口的静态变量,或者对该静态变量赋值

3)调用类的静态方法

4)反射(Class.forName("xx"))

5)初始化一个类的子类(会首先初始化子类的父类)

6)JVM启动时标明的启动类,即文件名和类名相同的那个类

三、类加载器

1)BootstrapClassLoader

加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类

2)ExtensionClassLoader

加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

3)AppClassLoader

加载classpath中指定的jar包及目录中class

4)CustomClassLoader

属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

加载过程中会先检查类是否被已加载,检查顺序是自底向上,从CustomClassLoader到BootStrapClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

四、双亲委派加载模型

  某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。

  注意,双亲委派模型是Java设计者推荐给开发者的类加载器的实现方式,并不是强制规定的。大多数的类加载器都遵循这个模型,但是JDK中也有较大规模破坏双亲模型的情况,例如线程上下文类加载器(Thread Context ClassLoader)的出现。

(1)线程上下文类加载器,这个类加载器可以通过java.lang.Thread类的setContextClassLoader()方法进行设置,如果创建线程时还未设置,它将会从父线程中继承一个,如果在应用程序的全局范围内都没有设置过的话,那么这个类加载器就是应用程序类加载器。JDBC就是采用了这种方式。

(2)Tomcat的类加载机制不能算完全“正统”的双亲委派,WebappClassLoader内部重写了loadClassfindClass方法,实现了绕过“双亲委派”直接加载web应用内部的资源,当然可以通过在Context.xml文件中加上<Loader delegate = "true">开启正统的“双亲委派”加载机制。

Java 类加载总结相关推荐

  1. 两道面试题,带你解析Java类加载机制

    2019独角兽企业重金招聘Python工程师标准>>> 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa {static ...

  2. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  3. 谈谈 Java 类加载机制

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 来源:Rainstorm , github.com/c-rainstorm/blog/blob/m ...

  4. JVM之Java类加载器

    前言 通过对Java类加载机制的了解,可以知道大概流程和各自的功能.其中类加载部分的功能是把类的Class文件读入内存,并创建java.lang.Class对象.这部分功能是由类加载器完成的. 1.类 ...

  5. 深入理解java类加载

    2019独角兽企业重金招聘Python工程师标准>>> 深入研究Java类加载机制   类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效 ...

  6. Java类加载机制:双亲委托模型

    Java类加载机制:双亲委托模型 前言(废话) 一如既往,这篇博客是我极为浅显的理解,仅仅是我记录我自己成长的一环而已.我以前听我老师说过,什么是进步,进步就是当你三个月后重新再看自己的代码,发现那就 ...

  7. Java 类加载体系之 ClassLoader 双亲委托机制

    Java 类加载体系之 ClassLoader 双亲委托机制 java 是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件 ...

  8. 深入探讨 Java 类加载器

    深入探讨 Java 类加载器 类加载器(class loader)是 Java™中的一个很重要的概念.类加载器负责加载 Java 类的字节代码到 Java 虚拟机中.本文首先详细介绍了 Java 类加 ...

  9. 深入研究Java类加载机制

    深入研究Java类加载机制   类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载 ...

  10. 80070583类不存在_结合JVM源码谈Java类加载器

    一.前言 之前文章 加多:ClassLoader解惑​zhuanlan.zhihu.com 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下. 二.Java类加载器的 ...

最新文章

  1. 超详细的Python matplotlib 绘制柱状图
  2. JSON是什么?它能带来什么?
  3. 异常检测3——AutoEncoder异常检测
  4. jquery中ajax应用——load()函数
  5. python如何调用阿里云接口_Python调用阿里云API接口实现自定义功能【二】——DescribeInstance窗口操作...
  6. UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position...的解决办法
  7. Tensor is not an element of this graph 解决方法
  8. 数据库系统概论(第5版)学习笔记第1章 1.1——数据库系统概论
  9. php获取海康的视频流,全平台RTMP组件EasyRTMP如何通过海康SDK获取视频流推送到RTMP流媒体服务器...
  10. 教师管理系统_ER图_功能图_数据字典_数据库脚本
  11. 电路实验一阶电路误差分析_动态电路分析
  12. 恶意软件清理助手1.94使用后的问题
  13. dll hijack 学习
  14. android移动应用开发答案,Android移动应用开发习题答案.pdf
  15. html5 footer header,W3C HTML5标准阅读笔记 – header、footer、main、address
  16. 某星级酒店警卫队定岗定编项目纪实 ——完善定岗定编,转向人性化管理
  17. adobe reader XI打开pdf崩溃修复2020.05
  18. CAN与RS485比较
  19. photon 服务器操作系统,PhotonServer游戏服务器端教程
  20. python笔迹识别_python_基于KNN算法的笔迹识别

热门文章

  1. [蓝桥杯][算法提高VIP]排列式-全排列
  2. Java将五个整数存入整形数组_异常处理:从命令行输入5个整数,放入一整型数组,然后打印输出。。。...
  3. HDU 4059 The Boss on Mars (容斥)(2011 Asia Dalian Regional Contest)
  4. Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈
  5. Codeforces Round #603 (Div. 2) E. Editor 线段树维护括号序列
  6. 剑指 Offer 43. 1~n 整数中 1 出现的次数(数位dp)
  7. Loj #6089. 小 Y 的背包计数问题
  8. 牛客题霸 [ 排序] C++题解/答案
  9. CF1491H Yuezheng Ling and Dynamic Tree(分块)
  10. YBTOJ洛谷P1407:稳定婚姻(强连通分量)