
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言是目前大多数软件开发程序员都在学习的一个编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程类加载阶段都有哪些。
1、加载阶段
简单来说,加载阶段就是将类文件加载到内存中的过程。在加载阶段,JVM需要完成以下3件事:
通过一个类的全限定名来获取定义此类的二进制字节流;
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;
在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
2、连接阶段
连接阶段又分为:验证阶段(Verification)、准备阶段(Preparation)和解析阶段(Resolution),具体执行的细节如下。
3、验证阶段
验证阶段也叫做校验阶段,它主要是用来验证加载到内存中的类是否是安全合规的文件,验证的主要动作大概有以下几个(当然,以下细节如果实在记不住也没关系):
文件格式校验包括常量池中的常量类型、Class文件的各个部分是否被删除或被追加了其他信息等;
元数据校验包括父类正确性校验(检查父类是否有被final修饰)、抽象类校验等;
字节码校验,此步骤为关键和复杂,主要用于校验程序中的语义是否合法且符合逻辑;
符号引用校验,对类自身以外比如常量池中的各种符号引用的信息进行匹配性校验。
4、准备阶段
准备阶段就开始给类中的静态变量设置默认值了,注意这里不是给静态变量设置初始值,而是设置默认值,二者还是有很大区别的。
5、解析阶段
解析阶段就是将常量池中的符号引用更换成直接引用了,所谓的符号引用是指以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可;而直接引用是可以直接指向目标的指针、相对偏移量或者是一个能间接定位到目标的句柄。
符号引用和直接引用有一个重要的区别:使用符号引用时被引用的目标不一定已经加载到内存中;而使用直接引用时,引用的目标必定已经存在虚拟机的内存中了。
6、初始化阶段
初始化阶段,Java虚拟机真正开始执行类中编写的Java程序代码,将主导权移交给应用程序。到这一步骤之后,类的加载过程就算正式完成了,此时会给静态变量设置初始值,并执行静态代码块的内容。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。