trouble‘s blog

我思故我在


  • Home
  • Archive
  • Tags
  •  

© 2025 trouble

Theme Typography by Makito

Proudly published with Hexo

ClassLoader

Posted at 2025-08-03 android 

  1. 类ClassLoader讲解
    1
    2
    3
    4
    5
    6
    JVM的类加载器包括三种
    1) BootStrap ClassLoader (引导类加载器) C/C++代码实现的加载器,加载指定的JDK的核心类库,比如java.lang、java.uti.。JAVA虚拟机的启动都是通过Bootstrap,该ClassLoader在java里无法获取,负责加载/lib下的类
    2)Extensions ClassLoader(拓展类加载器) JAVA实现类为ExtClassLoader,提供除了系统类之外的额外功能,可以在java里获取,负责加载/lib/ext下的类
    3)Application ClassLoader
    JAVA中实现类为AppClassLoader,开发人员开发的代码就是由它来加载,ClassLoader.getSystemClassLoader返回的就是这个类加载器。

  2. 自定义类加载器,通过继承java.lang.ClassLoader类的方式来实现自己的类加载器
  3. 双亲委派
1
2
3
4
5
6
7
8
9
Bootstrap ClassLoader
​ |
Extension ClassLoader
​ |
Application ClassLoader
​ |
Custom ClassLoader 自定义

先Bootstrap ClassLoader加载核心类库,从上向下的顺序。
  1. 双亲委派模式(了解)
1
2
3
4
什么事情先给祖先去完成,如果祖先完不成,再交给儿子完成,
为什么要有双亲委派:
A. 避免重复加载,如果已经加载过一次class, 可以直接读取已经加载的Class
B. 更加安全,无法自定义类来替代系统的类,可以防止核心APi库备随意更改
  1. 类加载的时机:
1
2
3
4
5
6
7
8
9
10
隐式加载:
创建类的实例
访问类的静态变量
调用类的静态方法
使用发射方式来强制创建某个类或接口的java.lang.Class对象
初始化某个类的子类

显示加载:
LoadClass()
forName()
  1. 类加载步骤:
1
2
3
4
5
6
装载 查找和导入Class文件
链接
a 检查 class文件数据的正确性
b 准备 给类的静态变量分配存储空间
c 解析 将符号引用转成直接引用
初始化 调用<clinit>函数,对静态变量,静态代码块执行初始化工作

Share 

 Previous post: Data Structures And Algorithm analysis in C++(1) Next post: linker学习(一) 

© 2025 trouble

Theme Typography by Makito

Proudly published with Hexo