类加载子系统其他(jvm笔记11)

类加载器的引用

●在JVM中表示两个class对象是否为同一个类存在两个必要条件:
➢类的完整类名必须一致,包括包名。
➢加载这个类的ClassLoader (指ClassLoader实例对象)必须相同。
●换句话说,在JVM中,即使这两个类对象(class对象)来源同一个Class文件,被同一个虚拟机所加载,但只要加载它们的ClassLoader实例对象不同,那么这两个类对象也是不相等的。

JVM必须知道-一个类型是由启动加载器加载的还是由用户类加载器加载的。如果一个类型是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方发区中。当解析一个类型到另一个类型的引用的时候,JVM需 要保证这两个类型的类加载器是相同的。

类的主动与被动

Java程序对类的使用方式分为:主动使用和被动使用。
●主动使用,又分为七种情况:
➢创建类的实例
➢访问某个类或接口的静态变量,或者对该静态变量赋值
➢调用类的静态方法
➢反射(比如: Class. forName (“com. atguigu. Test") )
➢初始化-一个类的子类
➢Java虚拟机启动时被标明为启动类的类
➢JDK 7开始提供的动态语言支持:java . lang . invoke . MethodHandle实例的解析结果
REF_ getStatic、 REF_ putStatic、 REF_ invokeStatic句柄对应的类没有初始化,则初始化
●除了以上七种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化

猜你喜欢

转载自blog.csdn.net/feiqipengcheng/article/details/106118713
今日推荐