jvm-类加载(类生命周期)

本文详细介绍了Java虚拟机(JVM)的类加载过程,包括加载、链接(验证、准备、解析)、初始化、使用和卸载等阶段。重点阐述了加载时的多种方式以及链接阶段的验证、准备和解析步骤。此外,还解释了类型、间接引用和直接引用的概念,以及JVM生命周期结束的四种情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java代码中,“类型”的加载loading,链接linking,初始化过程都是在运行期间完成的

1,加载(loading)一般指:查找并将类的字节码文件通过类加载器加载到内存中,
    还有其他方式加载例如:从网络上加载class;从jar加载class;java源文件动态编译并加载
    
    The Java Virtual Machine dynamically loads, links and initializes classes and interfaces. 
    java虚拟机动态加载,链接,初始化类和接口类型,
    Loading is the process of finding the binary representation of a class or interface type with a particular name and creating a class or interface from that binary representation.
    加载是一个发现具有特定名字的类和接口类型的二进制表现和从二进制表示创建类和接口的过程,
    Linking is the process of taking a class or interface and combining it into the run-time state of the Java Virtual Machine so that it can be executed. 
    链接是一个获取类和接口并且把它结合到虚拟机运行时状态被执行的过程。
    Initialization of a class or interface consists of executing the class or interface initialization method 
    初始化类和接口时会执行类和接口的初始化方法。
    (本人亲自翻译,看原文可见链接:https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-5.html#jvms-5.5)
    
2,链接(linking) 是一个过程:验证verification+准备preparation+解析resolution
    2.1,验证(verification):确保被加载的类符合JVM的规范 
                主要包括四种验证,文件格式验证,元数据验证,字节码验证,符号引用验证。
    2.2,准备(preparation):类的静态变量分配内存,给静态变量初始化为默认值,int a = 0
    2.3,解析(resolution):将类中的符号引用(间接引用)转换为直接引用
3,初始化(initialization)
    类的静态变量赋予正确的初始化值,例如:生命中static a = 3,此时,给a变量赋值为3.
4,使用(using)
5,卸载(unloading)

    将类从内存中清理掉。
名词解释
    类型:class,interface,enum


问题,
    1为什么第二个叫linking
        答:从英文上可以看出,链接是将类和接口结合到jvm运行状态,这个结合的过程就叫做链接。
    2间接引用,直接引用是啥?

        答:当一个Java类被编译成Class之后,假如这个类称为A,并且A中引用了B,那么在编译阶段A是不知道B有没有被编译的,而且此时B也一定没有被加载,所以A 肯定不知道B的实际地址,那么此时在A的class文件中,将使用一个字符串S来代表B的地址,S就被称为符号引用,在运行时,如果A发生了类加载到了解析阶段会发现B还未被加载,那么将会触发B的类加载,将B加载到虚拟机中,此时A中B的符号引用将会被替换为B的实际地址,这被称为直接引用。这样也能真正的调用B了
小结:
    1,2,3个阶段中变量的操作,只和类的静态变量相关,此时还没有该类的对象生成。

    
知识小点心:
    java虚拟机与程序的生命周期,以下四种情况JVM将结束生命周期
    1,程序中显式调用System.exit()方法
    2,程序正常运行结束
    3,程序运行时抛出运行时异常,没有被处理,异常结束JVM的生命周期
    4,OS内部报错。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值