关于类的主动使用和被动使用
在JVM当中表示两个class对象是否为同一个类存在的两个必要条件:
- 类的完整类名必须一致,包括包名。
- 加载这个类的ClassLoader必须相同。
换句话说,在JVM当中,即使这两个类对象(class对象)来源同一个class文件,被同一个虚拟机加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。
对类加载器的引用
JVM必须知道一个类是由系统类加载器还是扩展类加载器,亦或是引导类加载器加载的。如果一个类是由系统类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区,当解析一个类型到另一个类型的引用时,JVM需要保证这两个类型的类加载器是相同的。
Java程序对类的使用分为主动使用和被动使用
主动使用
- 创建类的实例
- 访问某个类或接口的静态变量,或者对静态变量赋值
- 调用类的静态方法
- 反射
- 初始化一个类的子类
- Java虚拟机在启动时被标明为启动类的类
- JDK7开始提供的动态语言支持
被动使用
除了如上的主动情况,其它使用Java类的方式都被看做是对类的被动使用,都不会导致类的初始化。
标签:Java,被动,JVM,使用,主动,加载 From: https://www.cnblogs.com/lilyflower/p/18072636