JVM类加载机制

2019-08-16 10:27:02来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

JVM类加载机制

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载入;委托机制是指先委托父装载器寻找目标类,只有在找不到的情况下才从自己的类路径下查找并装载目标类。由于全盘负责委托机制可以避免安全隐患的发生。


原文链接:https://www.cnblogs.com/haizhilangzi/p/11129358.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:git rebase VS git merge? 更优雅的 git 合并方式值得拥有

下一篇:Spring学习笔记(一)