JVM类加载机制
jvm的类加载机制 一.类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括了:加载,验证,准备,解析,初始化,使用和卸载七个阶段。其中验证,准备和解析三个部分统称为连接。 加载,验证,准备,初始化和卸载这五个阶段的顺序是确定的,而解析阶段不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持java的动态绑定。 注意: 1.加载。虚拟机规范中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化(而加载,验证,准备最自然需要在此之前开始) 情况1:遇到new,getstatic,putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先出发初始化(对应场景就是使用new实例化对象的时候,读取或设置一个类的静态字段(被final修饰,已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候)。 情况2:使用java.lang.reflect包的方法对类进行反射调用的时候 情况3:当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。 情况4:当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。