第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

JAVA虛擬機的類加載機制

標簽:
Java

作者:吕宗胜


在JAVA中,有一句口号我们众所周知,“一次编写,到处运行”。而支持JAVA这种特性的关键之处在于JAVA虚拟机和字节码存储格式,JAVA虚拟机不与JAVA变成语言捆绑,只与Class文件所关联。正因为JAVA只与Class文件相关,它不关心Class的来源,所以虚拟机对Class文件的格式有着十分严格的定义,以便进行Class的合法性等的验证。而Class文件需要被JAVA虚拟机加载,才能最终被虚拟机执行。




1.类的生命周期




类从被加载到虚拟机到卸载出内存,它的整个生命周期有:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备和解析这3个部分统称为连接。


5bc215ed0001019909800231.jpg


从类加载的原则上来说,类的生命周期一般是按照这个顺序来的,这里我们重点来看看加载、验证、准备、解析和初始化这5个过程,这5个过程是类在使用之前会完成。下面我们重点来介绍一下类不同生命周期的具体过程。




1.1加载




在加载阶段,虚拟机要完成一下3件事情:




a. 获取类定义的二进制流(通过类的全限定名来获取)




b. 将该二进制流所代表的静态存储结构转化为方法区的运行时数据结构




c. 在内存中生成一个代表该类的java.lang.Class对象。




1.2 验证




验证是连接阶段的第一步,这一阶段的目的主要是为了验证Class文件的正确性,JAVA虚拟机对Class文件的来源并没有要求,甚至我们可以用文本编辑器来编写Class文件,所以验证是非常有必要的,验证是否严谨,直接关系虚拟机最终运行的正确性。




验证阶段主要包括对Class文件格式的验证、元数据的验证、字节码的验证以及符号引用的验证。




1.3 准备




准备阶段是开始为类变量进行内存分配并设置变量的初始值。这里说明一下类变量是指被static修饰的变量,而不包含实例变量。这里的类变量的初始化时在方法区中进行内存分配,而不是在堆中进行的。这里说的变量的初始值,是指设置成零值。




public static int value=100; //在类变量初始化的阶段,value的值为0,而不是100




当然,变量被设置成零值,也不是绝对的,如果该类变量是常量的话,则会直接设置成常量值。




1.4 解析




解析阶段是虚拟机将常量池内的符号引用替换成直接引用的过程。




1.5 初始化




类的初始化是类加载过程的最后一步,在准备阶段,类变量已经进行了初始化,而在初始化阶段,虚拟机则会根据程序来初始化类变量和其他资源。




2.类加载器




类加载器是用于实现类的加载动作,在JAVA中,类的唯一性是由类和加载该类的加载器一同唯一决定的。每一个类加载器,都拥有一个独立的类名称空间。所以简单的来说,如果两个类相等,只有在这两个类是由同一个类加载器加载的前提下有成立。




2.1 双亲委派模型



作者:网易云社区
链接:https://www.jianshu.com/p/476232c3464d


點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消