博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java虚拟机是如何加载Java类的?
阅读量:5159 次
发布时间:2019-06-13

本文共 792 字,大约阅读时间需要 2 分钟。

 

  一般来说,我们把类加载过程分为三个主要步骤:加载、链接、初始化

 

  加载:是指查找字节流,并且据此创建类的过程。

  Java 虚拟机借助类加载器来完成查找字节流的过程。

  启动类加载器(Bootstrap Class-Loader),加载jre/lib下面的jar文件,如rt.jar。

  扩展类加载器(Extention or Ext Class-Loader),负责加载我们放到jre/lib/ext/目录下面的jar包,这就是所谓的extention机制。

  应用类加载器(Application or App Class-Loader),就是加载我们最熟悉的classpath的内容。

  双亲委派模型:当类加载器试图加载某个类型的时候,除非父加载器找不到相应类型,否则尽量将这个任务代理给当前加载器的父加载器去加载。

  使用双亲委派模型的目的是避免重复加载Java类型。

 

  链接:是指将创建成的类合并至 Java 虚拟机中,使之能够执行的过程。

  它可分为验证、准备以及解析三个阶段。

  验证阶段:确保被加载类能够满足 Java 虚拟机的约束条件。

  准备阶段:为被加载类的静态字段分配内存。

  解析阶段:将符号引用解析为实际引用。

  注:在 class 文件被加载至 Java 虚拟机之前,这个类无法知道其他类及其方法、字段所对应的具体地址,甚至不知道自己的方法、字段的地址。因此,每当需要引用这些成员时,Java编译器会生成一个符号引用。

 

  初始化:真正去执行类初始化的代码逻辑,包括静态字段赋值的动作,以及执行类定义中的静态初始化块内的逻辑,

  编译器在编译阶段就会把这部分逻辑整理好,父类型的初始化逻辑优先于当前类型的逻辑。

 

转载于:https://www.cnblogs.com/starinbrook/p/9364161.html

你可能感兴趣的文章
Groovy 学习手册(2)
查看>>
AngularJs中directive的延迟加载
查看>>
JGUI源码:响应式布局简单实现(13)
查看>>
Django中间件登录后可以阅读查看
查看>>
C# 网络编程之基于SMTP发送电子邮件
查看>>
Ef Core增加Sql方法
查看>>
TCP/IP协议
查看>>
java 几种常见的定时器
查看>>
WIN10 计算器 计算 表数范围小的可以向表数范围大 数据丢失
查看>>
知识点
查看>>
Judy alpha 第一天
查看>>
Json序列化之.NET开源类库Newtonsoft.Json
查看>>
xml序列化及反序列化.net对象
查看>>
需要我们了解的SQL Server阻塞原因与解决方法
查看>>
customize Vimium
查看>>
Chemistry
查看>>
mysql的Event 及 时间 操作
查看>>
python中的魔法属性
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>