生命周期类从加载到虚拟机内存到卸载内存,就是它的整个生命周期,包括加载LoadingLinking(Verification验证,PreparationPreparation,ParsingResolution)InitializationInitialization使用UsingtounloadUnloading7个阶段顺序加载、验证、准备、初始化、卸载五个阶段的顺序是确定的,但是【解析】不一定,有些情况下可以在初始化之后才开始,这个是done支持java的运行时绑定特性(也称为后期绑定)加载启动main方法时创建类的实例创建子类的实例访问类的静态方法ReflectionClass.forName()加载时机知识点loading通过类的全限定名获取类的二进制字节流;将二进制字节流表示的静态结构转换为方法区的运行时数据结构;在内存中创建一个代表该类的java.lang.Class对象,作为该类各种数据在方法区的访问入口链接。验证阶段确保Class文件的字节流所包含的信息符合当前虚拟机的要求,不会危及虚拟机本身的安全。包括文件格式校验;验证字节流是否符合Class文件格式的规范,是否可以被当前版本的虚拟机处理;是否以幻数“0XCAFEBABE”开头;主次版本号是否在当前虚拟机的处理范围内;常量池是否存在不支持的常量类型;指向常量的索引值是否指向不存在的常量;CONSTANT_Utf8_info类型常量是否有不符合UTF8编码的数据元数据校验;对字节码描述信息进行语义分析,确保其符合Java语法规范字节码验证;该阶段是验证过程中最复杂的阶段,即对方法体进行语义分析,确保方法在运行时事件符号引用验证时不会出现危及虚拟机的情况;该阶段发生在Parsing阶段,保证解析正常进行。准备阶段是正式为类变量(或静态成员变量)分配内存并设置初始值的阶段。这些变量(不包括实例变量)使用的内存分配在方法区。初始值通常是数据类型的零值(0,null)。假设一个类变量定义为:publicstaticintvalue=123;准备阶段之后变量值的初始值为0而不是123,因为此时还没有开始执行任何Java方法。如果类字段的字段属性表中存在ConstantValue属性,则在准备阶段将value初始化为ConstantValue属性指定的值。假设上面类变量值的定义变成:publicstaticfinalintvalue=123;然后在准备阶段虚拟机根据ConstantValue的设置赋值为123。解析解析阶段是虚拟机将常量池中的符号引用替换为直接引用的过程。符号分析知识点初始化类初始化阶段是类加载过程的最后一步,是执行类构造函数的
