深入Java虚拟机之类加载
类加载的流程:
- 加载
连接
- 验证
- 准备
- 解析
- 初始化
加载
类的加载指的是将类的
.class文件
中的二进制数据读入到内存
中,将其放在运行时数据区的方法区内
,然后在堆区创建一个 java.lang.Class对象
,用来封装类在方法区内的数据结构
.
加载.class文件的方式
- 从本地系统中直接加载
- 通过网络下载.class文件
- 从zip,jar等归档文件中加载.class文件
- 从专有数据库中提取.class文件
- 将Java源文件动态编译为.class文件
类加载器:
Java虚拟机自带的类加载器
- 根类加载器(Bootstrap):不是java实现,是由c++实现。没有父加载器。负责加载虚拟机的核心类库。如java.lang.*等。
- 扩展类加载器(Extension):java实现,继承了ClassLoader。加载java.ext.dirs系统所指定的目录中加载类库。
- 系统类加载器(System):java实现,继承了ClassLoader。加载Classpath或者系统属性java.class.path所指定的目录中加载类。
自定义的类加载器
- java.lang.ClassLoader的子类
- 用户可以定制类的加载方式
连接
类被加载后,就进入连接阶段。连接就是 将已经读入到内存的类的二进制数据合并 到虚拟机的运行时环境中去。
验证
- 类文件的结构检查
- 语义检查
- 字节码验证
- 二进制兼容性的验证
准备
java虚拟机为类的静态变量分配内存,并设置默认的初始值。
解析
java虚拟机会把类的二进制数据中的符号引用替换为直接引用。
初始化
在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值。
- 类的初始化步骤
还没有评论,来说两句吧...