JVM类加载机制
2019-08-16 10:27:02来源:博客园 阅读 ()
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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- JVM常见面试题解析 2020-06-11
- 【JVM故事】了解JVM的结构,好在面试时吹牛 2020-06-06
- 深入浅出 Java 类加载机制! 2020-06-05
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash