- 前言
- 一、类编译机制
- 二、类加载过程
- 1.类加载器
- 2.双亲委派机制
- 作用
前言
Java项目启动时都会去执行main方法,因为main方法中包括了主要的逻辑代码,那么执行main方法之前都做了什么?
一、类编译机制
将一个.java文件经过词法分析、语法分析、语义分析等一系列操作最终生成对应的字节码文件(.class文件)的过程,这个过程并不属于JVM的部分。
二、类加载过程将字节码文件(.class)文件加载到内存中,方便后面运行过程中实例化和进行运算
| 步骤 | 描述 |
|---|---|
| 加载 | 从磁盘中读取字节码文件(.class),并在内存中生成一个class对象 |
| 验证 | 校验字节码文件的正确性 |
| 准备 | 给静态变量分配内存,并初始化为默认值 |
| 解析 | 将符号引用替换为直接引用 |
| 初始化 | 将类中的静态变量赋值为指定值,执行静态代码块 |
| 使用 | 业务逻辑中被调用 |
| 卸载 | 代码运行结束所有内存被释放 |
| 分类 | 作用 |
|---|---|
| 引导类加载器 | 用来加载Java的核心类库,既jdk_home/lib目录下的核心api |
| 拓展类加载器 | 加载支持Java运行的一些拓展类,比如DNS相关、ZIP相关等jar包 |
| 系统类加载器 | java 应用的类都是由它来完成加载的 |
| 自定义加载器 | 通过继承java.lang.ClassLoader类的方式实现自己的类加载器 |
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载
作用- 避免重复加载
- 具有沙箱安全,保证核心API不会被替换



