首页 > 其他 > 详细

jvm学习----加载类子系统

时间:2020-12-29 23:07:58      阅读:42      评论:0      收藏:0      [点我收藏+]

这是上一次说到的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才是对应我们平时的构造器方法,

 

 

 

 技术分享图片

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

 

jvm学习----加载类子系统

原文:https://www.cnblogs.com/wdxjy/p/13918200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!