JVM类加载分为三个步骤:加载(load)->链接(link)->初始化(init)。加载通过类的完全限定名获取定义类的二进制字节码文件我们知道.class文件有几种常见的加载方式:本地系统直接加载网络从zip压缩包(jar,warpackage)并运行Time-calculatedgeneration(dynamicproxy)generatedbyotherfiles(JSP)extractfromproprietarydatabase(less)从加密文件中获取(防止.class文件被反编译)并转换为该字节表示的静态存储结构stream在内存中为方法区的运行时数据结构生成一个代表该类的java.lang.Class对象,作为该类各种数据在方法区的访问链接也分为三步:验证—>准备—>分析验证确保类文件字节流中包含的信息符合当前虚拟机的要求,保证加载类的正确性,保护虚拟机的安全。验证主要有四种:文件格式验证、元数据验证、字节码验证、符号引用验证准备为类变量(静态变量)分配内存(到方法区),并设置默认初始值(零值)特例:这里是不包含final修饰的静态变量,因为final变量会在编译时分配内存空间(因为是常量),会在准备阶段显式初始化(??直接初始化为代码中赋值的值)).这里也不包括强度变量,因为实例变量是和对象一起分配到堆中的。Resolution将常量池中的符号引用转换为直接引用。实际上,解析操作通常在初始化之后执行。符号引用:一组描述引用目标的符号。直接引用:直接指向目标的指针、相对偏移量或句柄。主要针对类或接口、字段、接口方法、方法类型等初始化执行类构造方法
