JVM类加载流程?初始化流程?
时间: 2023-05-19 18:06:52 浏览: 87
JVM类加载流程分为加载、验证、准备、解析和初始化五个阶段。其中,加载阶段是将类的二进制数据读入内存,并生成对应的Class对象;验证阶段是对加载的类进行验证,确保其符合JVM规范;准备阶段是为类的静态变量分配内存,并设置默认初始值;解析阶段是将符号引用转换为直接引用;初始化阶段是执行类的初始化代码,包括静态变量赋值和静态代码块的执行。
JVM类的初始化流程是按照以下顺序执行的:先执行父类的初始化,再执行子类的初始化;静态变量按照定义顺序依次初始化;静态代码块按照定义顺序依次执行。
相关问题
什么是类加载?何时类加载?类加载流程?
类加载是指将类的字节码文件加载到内存中,并生成对应的Class对象的过程。在Java程序运行时,只有在需要使用某个类时才会加载该类,由于类的加载是一个比较耗费资源的过程,所以在Java中使用了“延迟加载”技术,即只有在必须要使用该类时才会进行加载。
类加载的时机包括:
1. 当创建对象时,需要加载对象所属的类。
2. 当调用类的静态成员时,需要加载该类。
3. 当使用反射方式访问某个类时,需要加载该类。
4. 当启动Java应用程序时,需要加载主类。
类加载的流程分为以下几个步骤:
1. 加载(Loading):将类的字节码文件读入内存,并生成对应的Class对象。
2. 链接(Linking):将类的二进制数据合并到JVM的运行时状态中,并进行校验、解析和初始化等操作。
3. 初始化(Initialization):为类的静态变量赋初始值。
在类加载过程中,JVM会先加载父类,再加载子类。同时,对于同一个类,JVM只会进行一次类加载,即使在多个地方使用该类也是一样的。如果在类加载过程中出现错误,JVM会抛出ClassNotFoundException或NoClassDefFoundError等异常。
jvm类加载机制的流程
JVM类加载机制的流程如下:
1. 加载(Loading):类加载器根据类的全限定名查找对应的.class文件,并将其读入内存。
2. 验证(Verification):对加载的类文件进行验证,确保其符合JVM规范,包括语法、语义、安全等方面。
3. 准备(Preparation):为类的静态变量分配内存,并设置默认值。
4. 解析(Resolution):将类中的符号引用转换为直接引用,即将类名、字段名等解析为内存地址。
5. 初始化(Initialization):执行类构造器(<clinit>)的代码,包括静态变量赋值和静态代码块的执行。
6. 使用(Usage):类被加载后,可以被其他类引用并使用。
7. 卸载(Unloading):当类不再被其他类引用时,JVM会卸载该类,释放内存。
注意:类的加载和初始化是延迟进行的,即在需要使用该类时才会进行加载和初始化。