文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中类的加载器及其加载过程

2023-05-16 14:26

关注

Java中类的加载器及其加载过程

概述

字节码文件在类加载器子系统中要进行加载、链接、初始化等处理,我们这里详细来谈其中过程

类加载器子系统负责从文件系统或网络中加载Class文件,且ClassLoader只负责class文件的加载,至于其能否运行,则交由ExecutionEngine来判断。

加载的类信息存放于一块称为方法区的内存空间。除了类的信息以外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)

?class文件最终加载到JVM中,根据这个文件可以实例化出n个一模一样的实例,加载到JVM的class文件则被称为DNA元数据模板,放在方法区。而在这整个文件到元数据模板的过程中,类装载器就起到了一个转换器的作用

转换和执行过程:

首先需要装载目标类,再进行链接,然后对其进行初始化,最终调用对应类中的方法

所以,类的加载过程如下?

过程一:Loading

这个过程也称为加载,但和类的加载不同,这个加载只是其中的一个环节,切莫搞混,我们这里用Loading来代替,以防混淆

Loading过程:

加载.class文件的几种方式:

过程二:Linking

链接阶段包括验证(Verify)、准备(Prepare)、解析(Resolve)

Verify

目的在于确保Class文件的字节流中包含信息符合当前虚拟机要求,保证被加载类的正确性,不会威胁虚拟机自身的安全。

验证有四种形式:

e.g.:

class字节码文件中以CAFEBABE开头,以供识别

Prepare

该阶段为类的变量分配内存表并且设置该变量的默认初始值,即零值。

不包含用final修饰的static,因为final在编译的时候就会分配了,准备阶段会进行显式初始化

同样也不会为实例变量分配初始化,类变量会分配在方法区中,但实例变量会随着对象一起分配到java堆

Resolve

该阶段将常量池内的符号引用转换为直接引用的过程

事实上,解析操作往往会伴随着JVM在执行完初始化之后再执行

符号引用就是一组符号来描述所引用的目标,符号引用的字面量形式明确定义在《java虚拟机规范》的class文件格式中。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄

解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等。对应常量池中的CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等

过程三:Initialization

该过程是执行类构造器方法()的过程

此方法不需定义,是javac虚拟机自动收集类中的所有类变量的赋值动作静态代码块中的语句合并而来,所以如果没有这两项操作,就不存在这个过程。

这里会出现一个神奇的现象:

static{
    number = 20;
}
private static int number = 10;

这样也可以执行,而执行结果为10,究其原因,number在prepare中早已初始化,并赋值为0,而来到Initialization阶段中才会开始进行赋值,首先执行static块中的number = 20,后再执行number = 10的赋值操作,最后结果为10。

*但在static中不能对其进行引用/调用,比如打印操作,会报错:Illegal forward reference*

构造器方法中指令按语句在源文件中出现的顺序执行

()不同于类的构造器(关联:构造器是虚拟机视角下的())

若该类具有父类,JVM会保证子类的()执行前,父类的()已经执行完毕

虚拟机必须保证一个类的()方法在多线程下被同步加锁

到此这篇关于Java中类的加载器及其加载过程的文章就介绍到这了,更多相关Java类加载器及过程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯