有资源网

搜索
有资源网 首页 编程语言 查看内容

JVM类加载机制

2019-7-26 01:05| 发布者: admin| 查看: 139| 评论: 0

摘要: JVM类加载器 类加载器是用来加载 Java 类到 Java 假造机中的。Java 假造机利用 Java 类的方式如下:Java 源程序(.java 文件)在颠末 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读

JVM类加载器

类加载器是用来加载 Java 类到 Java 假造机中的。Java 假造机利用 Java 类的方式如下:Java 源程序(.java 文件)在颠末 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表现一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象

JVM类加载过程图解

编程语言-JVM类加载机制(1)
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装载应用程序类。
编程语言-JVM类加载机制(2)
运行以上的程序可以知道,当前的ClassLoader是AppClassLoder,其父ClassLoader是ExtClassLoader,祖父ClassLoader是根类装载器。java无法获取它的句柄,所以返回是null

JVM装载器委托机制

编程语言-JVM类加载机制(3)
JVM类装载时利用“通盘负责委托机制”,通盘负责是指当一个ClassLoader装载一个类时,除非表现地利用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;委托机制是指先委托父装载器探求目标类,只有在找不到的环境下才从本身的类路径下查找并装载目标类。由于通盘负责委托机制可以避免安全隐患的发生。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部