JVM学习之旅–JVM类加载机制 1
文章目录
前言
JVM整体的运行过程是 先把我们编写的.java代码文件编译成.class字节码文件,然后类加载器把.class字节码文件中的类给加载到jvm中,接着是JVM执行代码一、整体过程
二、JVM加载过程
一个类从加载到使用,一般会经历下面过程:
加载 ——> 验证 ——> 准备 ——> 解析 ——> 初始化 ——> 使用 ——> 卸载
- 1、加载 JVM启动会给类加载到内存
- 2、验证 校验加载的.class类文件中的内容是否符合指定的规范
- 3、准备 给类分配一定的内存空间,并给类中的类变量(static修饰的变量)分配内存空间并赋默认的 初始值
- 4、 解析 把符号引用替换为直接引用
- 5、 初始化 赋值 (之前准备阶段只是给初始值)
三、什么时候会初始化一个类
比如使用new关键字或者包含main()方法的主类。必须是立马初始化的
如果初始化一个类的时候,发现其父类还没有初始化,则必须先初始化父类
四、类加载器
1 启动类加载器 Bootstrap ClassLoader
主要负责加载java目录下的核心类,在java安装目录的lib文件夹
2 扩展类加载器 Extension ClassLoader
主要负责加载java安装目录 lib\ext 下的类
3 应用程序类加载器 Application ClassLoader
主要负责加载 classPath环境变量所制定的路径中的类,可以理解为写好的java代码
4 自定义类加载器
可根据需求加载你所需要的类
五、双亲委派机制什么意思?
假设你的应用程序类加载器需要加载一个类,他首先会委派给自己的附加在其去加载,最终传导到最顶层的类加载器去加载
如果福类加载器在自己负责加载的范围内没有找到这个类就会报错,同时子加载器会catch这个错误尝试自己加载