栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-Jvm-.class文件加载过程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-Jvm-.class文件加载过程

我们有一个.java的文件通过执行javac命令可以变成.class文件,当我们调用Java命令的时间class会被加载到内存中,这个过程叫做classloader,即内存加载。

类加载的过程有三个:loading-装载,linking-链接,initializing-初始化

其中linking又分为三个步骤:verification,perparation,resolution;

类加载过程:

1.装载:查找和导入的class文件到内存(loading)

2.链接:其中的解析步骤是可以选择的(linking)

(a) 检查:检查载入的class文件数据的正确性 (verification)

(b) 准备:给类的静态变量分配存储空间,赋默认值 (perparation)

(c) 解析:把class文件常量池中用到的符号引用转为直接内存地址 (resolution)

3.初始化:对静态变量,静态代码块执行初始化工作(initializing)

注意:在链接(linking)的第二步中,此处是为静态代码块分配空间且赋默认值,此时的值为0,若在初始化的时候有static int a = 10; 这个时候才会给初始化赋值为10。

类加载器:

类在加载的过程是通过类加载器加载的,类加载器的加载过程是分成不同的层次进行加载的,不同的加载器来加载不同的class文件,Bootstrap--Extension--Application--Custom(自定义加载器)

1,Bootstrap:最顶层的类加载器,负责加载JDK中的核心类库,是由C++实现的

2,Extension:是用来加载扩展类的,主要负责加载Java的扩展类库,默认加载JAVA_HOME/jre/lib/ext/目录下的所有jar包

3, App:加载calsspath指定内容,我们项目中自己创建的class基本都由此加载器加载

4,custom classloader:自定义加载器

java在类加载的时候是通过类加载器加载进jvm的,而jvm是采用双亲委派的机制对类进行加载的。

双亲委派机制的过程:

 cache: 电脑高速缓冲存储器;贮存物;隐藏处

双亲委派全过程:重点

1.首先去Custom ClassLoader的cache中查看是否加载过,有则直接返回。

2.不存在去App ClassLoader的cache中查看是否加载过,有则直接返回。

3.不存在去Extension ClassLoader的cache中查看是否加载过,有则直接返回。

4.不存在去Bootstrap ClassLoader的cache中查看是否加载过,有则直接返回。

5.不存在则尝试进行加载,首先是Bootstrap ClassLoader去加载,看这个类在不在自己的加载范围

6.不在自己的加载范围就去Extension ClassLoader加载,看这个类在不在自己的加载范围

7.不在自己的加载范文就去App ClassLoader加载,看这个类在不在自己的加载范围

8.如果Custom ClassLoader也找不到的话,加载不了就会返回报错classNotFound

总结:执行过程---(向上查找,向下加载)

双亲委派的好处:

不浪费资源,加载过的资源就不会再次就行加载,避免重复加载。

安全,可避免用户自己编写的类动态替换Java的核心类,如java.lang.String。

读完欢迎您留言,有问题或者不足之处鄙人及时修正,顺便点个赞呦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号