请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问 切换到宽版

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

切换风格 立即注册 找回密码

Java教程网

查看: 27892|回复: 30

JVM类加载机制

[复制链接]

新浪微博达人勋

844

积分

477

帖子

38

贡献

Rank: 4

积分
844

社区QQ达人

发表于 2019-7-16 09:35:59 | 显示全部楼层 |阅读模式
JVM类加载器
类加载器是用来加载 Java 类到 Java 虚拟机中的。Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象
JVM类加载过程图解

1)装载:查找和导入Class文件
2)链接:执行校验,准备,解析步骤
a)校验:检查载入Class文件数据的正确性
b)准备:给类的静态变量分配存储空间
c)解析:将符号引用转换为直接引用
3)初始化:对类的静态变量,静态代码块执行初始化工作
类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和载入Class字节码文件。JVM运行时会产生3个ClassLoader;根转载器,ExtClassLoader(扩展类装载器)和AppClassLoader(应用类装载器)。根类装载器不是ClassLoader的子类,它适应C++语言编写,因而在java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar,charset.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类,ExtClassLoader负责装载JRE扩展目录ext的JAR类包:AppClassLoader负责装载Classpath路径下的类包。
这3个类装载器之间存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器,默认情况下,使用AppClassLoader装载应用程序类。

运行以上的程序可以知道,当前的ClassLoader是AppClassLoder,其父ClassLoader是ExtClassLoader,祖父ClassLoader是根类装载器。java无法获取它的句柄,所以返回是null
JVM装载器委托机制

JVM类装载时使用“全盘负责委托机制”,全盘负责是指当一个ClassLoader装载一个类时,除非显示地使用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;委托机制是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径下查找并装载目标类。由于全盘负责委托机制可以避免安全隐患的发生。

来自群组: java开发组

新浪微博达人勋

6651

积分

1647

帖子

1668

贡献

Rank: 8Rank: 8

积分
6651
发表于 2019-11-26 20:25:20 | 显示全部楼层
呵呵。。。

新浪微博达人勋

6645

积分

1644

帖子

1667

贡献

Rank: 8Rank: 8

积分
6645
发表于 2019-11-27 17:40:30 | 显示全部楼层
有空一起交流一下

新浪微博达人勋

6675

积分

1650

帖子

1675

贡献

Rank: 8Rank: 8

积分
6675
发表于 2019-11-27 23:06:48 | 显示全部楼层
支持你哈...................................

新浪微博达人勋

6526

积分

1606

帖子

1640

贡献

Rank: 8Rank: 8

积分
6526
发表于 2019-11-28 08:15:02 | 显示全部楼层
顶起顶起顶起

新浪微博达人勋

7194

积分

1808

帖子

1777

贡献

Rank: 8Rank: 8

积分
7194

社区QQ达人最佳新人活跃会员热心会员

发表于 2019-11-28 08:22:37 | 显示全部楼层
打酱油的人拉,回复下赚取积分

新浪微博达人勋

6826

积分

1687

帖子

1713

贡献

Rank: 8Rank: 8

积分
6826
发表于 2019-11-28 08:43:49 | 显示全部楼层
支持,楼下的跟上哈~

新浪微博达人勋

6697

积分

1654

帖子

1681

贡献

Rank: 8Rank: 8

积分
6697

社区QQ达人

发表于 2019-11-28 15:47:38 | 显示全部楼层
这么强,支持楼主,佩服

新浪微博达人勋

7207

积分

1823

帖子

1777

贡献

Rank: 8Rank: 8

积分
7207

社区QQ达人最佳新人活跃会员热心会员

发表于 2019-11-28 23:23:30 | 显示全部楼层
垃圾内容,路过为证。

新浪微博达人勋

2878

积分

701

帖子

725

贡献

Rank: 6Rank: 6

积分
2878

社区QQ达人

发表于 2019-11-28 23:45:36 | 显示全部楼层
占坑编辑ing
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋|手机版|Archiver|Java教程网    

GMT+8, 2020-9-29 14:41 , Processed in 0.325200 second(s), 40 queries .

Powered by Discuz X3.2

© 2001-2013 JAVA教程网

快速回复 返回顶部 返回列表