jvm学习----加载类子系统
这是上一次说到的jvm整体结构,这次主要来写类加载器的子系统的三个阶段
类装载器子系统的作用:是把字节码文件加载到jvm虚拟机中
在子系统里面主要分三个部分:加载,链接,初始化
1,加载:将class文件加载进子系统(已经进入虚拟机了)
对于加载具体过程如下:
加载class文件过程最常见的是在本地硬盘中加载,还有如下的一下有其他情况:、
加载的作用就是把文件中的数据作用到java中成为活的数据,在系统中加载该类作为数据可以访问的入口
2,链接:链接的三个过程---验证,准备,解析
验证:在验证过程中会对加载进来的class文件开头进行验证是否为标准的格式(java虚拟机为CAFWBABE),下图是class的十六进制编码:
准备阶段(Prepare):会先把变量进行默认初始化(整形为0,浮点为0.0布尔为false等等),常量在这个阶段直接为他赋值好了(final 修饰的static变量)
举例:
private int a= 5
public static final int b= 6
在准备阶段:a=0(initial才会被赋值为5),b=6. 这是因为常用再被定义之后就不会被修改了,而变量则需要经常被修改
解析阶段:就是会准备一下符号引用,对于常量,方法等内容用一下符号表达存放起来。(这个环节一般在初始化以后进行,后面对于方法,常量调用的时候在具体说明)
初始化:对属性什么的进行赋值
类构造器方法clinit是对于初始化之前的操作,如果没有静态变量的赋值和静待代码块的语句,clinit方法将不会被执行,父类的clinit会在子类的之前执行
而init才是对应我们平时的构造器方法,
这是对两个变量的赋值过程的情况