3.类加载详解

1.类加载的时机

1. 遇到 new 、 get static 、 put static 和 invoke static 这四条字节码指令时,如果对应的类没有初始化,则要对对应的类先进行初始化。
    这四个指令对应到我们java代码中的场景分别是:
       new关键字实例化对象的时候;
       读取或设置一个类的静态字段(读取被final修饰,已在编译器把结果放入常量池的静态字段除外) ;
       调用类的静态方法时。
2. 使用 java.lang.reflect 包方法时对类进行反射调用的时候。
3. 初始化一个类的时候发现其父类还没初始化,要先初始化其父类。
4. 当虚拟机开始启动时,用户需要指定一个主类,虚拟机会先执行这个主类的初始化。
 

2.类加载的过程

3.类加载详解_第1张图片

主要分为三大阶段:加载阶段、链接阶段、初始化阶段

其中链接阶段又分为:验证、准备、解析

类的卸载,当一个类对应的对象都已经回收的时候,会触发卸载。

 

 

 

你可能感兴趣的:(3.类加载详解)