java类加载机制概括

举报
小奇JAVA 发表于 2022/03/30 00:12:55 2022/03/30
【摘要】 前言 在我们运行java程序时,java底层进行了一系列的操作,大体有五个操作步骤,分别按照先后顺序为:加载——>验证——>准备——>解析——>初始化,下面分别来解释这五个步骤具体...

前言
在我们运行java程序时,java底层进行了一系列的操作,大体有五个操作步骤,分别按照先后顺序为:加载——>验证——>准备——>解析——>初始化,下面分别来解释这五个步骤具体干了什么。
加载
jvm将我们写好的类从磁盘加载到内存中。(在我们编写java代码的时候,我们保存是将代码保存到我们的硬盘上,而在我们执行java程序的时候,就会将我们硬盘上的代码拷贝到内存中来进行操作,因为内存中操作速度更快)
验证
jvm验证字节码文件的正确性,如果我们写的代码语法有错误,在这一步就会检测出来。(jvm对代码进行分析验证,如果我们没有按照java语法来开发,例如我们程序没有以class开头,或者我们赋值类型不匹配,jvm都会分析验证出来)
准备
给类的静态变量分配内存,并赋予默认值。(jvm会先将我们定义为静态变量的类型分配内存,并将默认值赋予)
解析
将符号引用替换为直接引用。(首先来讲一下符号引用和直接引用是什么)
符号引用:假如我们main主类中new了一个student类,但是我们在加载的时候并不会去找我们student类在磁盘中的具体地址,而是以一个例如:com.xiaoqi.cn.Student;这样一个包位置来代表我们对student类的引用。
直接引用:当我们main主类中new了一个student类,我们会将student类在磁盘的位置找到,位置例如:0X06HXXXXX,这样我们就可以直接通过磁盘位置找到student类。
初始化
对类的静态变量初始化为指定的值。(在准备阶段我们对类的静态变量分配了内存空间,并赋予了默认值,而在初始化阶段我们将用我们静态变量定义的真实值把默认值替换,如果我们静态变量没有定义初始值,那他就会是默认值,这就是我们为什么new一个变量的时候他会给我们一个默认值,而不是空值)

文章来源: xiaoqijava.blog.csdn.net,作者:学无止境小奇,版权归原作者所有,如需转载,请联系作者。

原文链接:xiaoqijava.blog.csdn.net/article/details/109143836

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。