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才是对应我们平时的构造器方法,

 

 

 

 

这是对两个变量的赋值过程的情况

 

posted @ 2020-12-29 19:58  L三木1121  阅读(40)  评论(0编辑  收藏  举报