java类加载机制+双亲委派模型详细分析

我们编写的java文件是怎么运行的呢? 带着这个疑问,让我们开始吧

假如我现在编写了一个 test.java文件, 首先源文件会经过这么一些过程,加载>验证>准备>解析>初始化>使用。

1、加载, 也就是说从我们磁盘并通过IO读取字节码文件,当使用到该类的时候才会加载,而不是整个项目全部的class文件多会加载的JVM内存去的。

2、验证: 在JVM层面会对java编译的class文件进行, 校验字节码的正确性,防止被篡改等。

3、准备: 这个阶段给类的静态变量分配内存,并赋予默认值。

4、解析: 将符号引用 替换 直接引用, 该阶段会把一些静态方法,比如main方法,替换为指向数据所存内存的指针或者句柄、(这个就是直接引用) 。

5、初始化阶段: 该阶段是对类的静态变量进行初始化指定的值,执行静态代码块。

双亲委派模型

双亲委派模型详解, 双亲委派模型由三大类加载器组成,父加载器、扩展类加载器、应用加载器。

1、BootStart ClassLoad 父加载器,主要负责jre中核心类库的加载比如rt.jar

2、EXT ClassLoad 扩展类加载器,主要负责ext扩展包里面的jar包

3、App ClassLoad 应用类加载器,主要负责我们自己编写的java类文件,以及依赖的jar包。

4、自定义加载器:   负责用户自定义路径下的类以及jar包。(打破双亲委派的核心)

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/90593.html

(0)
guozi's avatarguozi
上一篇 2024年6月5日 下午6:00
下一篇 2024年6月7日 上午9:17

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注