JVM类加载相关————《深入理解JAVA虚拟机》


类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析3部分统称连接

类加载的时机

Java虚拟机规范中并没有进行强制约束什么情况下开始类加载过程中的第一个阶段。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“”初始化“”(而加载、验证、准备自然需要在此之前开始)。

  • 遇到new、getstatic、putstatic、或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。
  • 使用java.lang.reflect包的方法对类进行反射调用时,如果类没有进行过初始化,则需要先触发其初始化。
  • 当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化。
  • 当虚拟机启动时,用户需要指定一个要执行的主类型(包含mian()方法那个类),虚拟机回先初始化这个类。
  • 当使用JDK1.7的动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后解析结果REF_getStatic,REF_putStatic,REFG_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行初始化,则需要先触发其初始化。s

你可能感兴趣的:(JVM类加载相关————《深入理解JAVA虚拟机》)