java 静态内部类加载机制_Java虚拟机--类加载机制

文末有彩蛋!!!!!!

类加载

对于虚拟机来说,一个对象的创建十分复杂,包含了很多步骤。首先,我们要从类加载说起。

类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载这7个阶段,类加载包含了前五个,具体如图:

1daa180f6b26

1522982931(1).png

一个.java文件在编译后会形成一个或多个class文件(若有内部类,则编译后会产生多个.class文件),但这些class文件中的信息,只有被加载到虚拟机中才能被运行和使用。

虚拟机把类的数据从class文件加载到内存,并对class文件中的数据进行校验、转换、解析、初始化等操作后,最终形成可以被虚拟机识别并使用的过程就叫做“虚拟机的类加载”。

接下来,笔者就对于其中的一些步骤进行详细的说明。

加载

“加载”是类加载中的一个过程,并且是通过类加载器来完成的。但是,什么时候会进行“加载”,虚拟机规范中并没有强制约束,而是交给具体的虚拟机实现来完成。

在此阶段中,虚拟机需要完成以下步骤:

通过全限定类名来获取类的二进制字节流,获取的方式可以通过jar包、war包、网络、JSP文件等方式获取,通过都是通过.class文件中获取的。

获取到字节流后,会将字节流中的信息转化为方法区中的运行时数据结构。

在内存中,生成代表该类的Class对象,作为访问该类的数据入口。在HotSpot中,Class对象并不存在于JVM虚拟机堆中,而是存在于方法区中。

在虚拟机中,当程序主动使用某个类时,如果该类还未被加载到内存中,JVM虚拟机会进行加载操作,直至初始化完成。

关于类加载器的话题,笔者在后面会有单独一章进行阐述。

验证

在完成加载阶段后,JVM虚拟机开始验证阶段,此阶段的目的很简单,很

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java类加载机制是指将类的字节码文件加载到内存中,并在运行时将其转换为可执行的代码的过程。Java类加载机制遵循了一定的规则和顺序,可以分为以下几个步骤: 1. 加载:类加载的第一步是加载,即将类的字节码文件加载到内存中。Java的类加载器负责从文件系统、网络或其他来源加载类的字节码文件。加载过程中会进行词法和语法的验证,确保字节码文件的正确性。 2. 链接:类加载的第二步是链接,即将已经加载的类与其他类或者符号进行关联。链接分为三个阶段: - 验证:验证阶段确保类的字节码文件符合Java虚拟机规范,包括检查文件格式、语义验证等。 - 准备:准备阶段为静态变量分配内存空间,并设置默认初始值。 - 解析:解析阶段将符号引用转换为直接引用,例如将类或者方法的符号引用解析为对应的内存地址。 3. 初始化:初始化是类加载的最后一步,在此步骤中会执行类的初始化代码,对静态变量进行赋值和执行静态代码块。类的初始化是在首次使用该类时触发的,或者通过反射方式调用`Class.forName()`方法来强制初始化。 Java类加载机制是动态的,可以根据需要加载和卸载类,它还支持类的继承、接口实现、内部类等特性。类加载机制Java语言的重要特性之一,它为Java提供了强大的动态性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值