首页 > 其他 > 详细

jvm类加载补充

时间:2020-09-09 17:22:39      阅读:53      评论:0      收藏:0      [点我收藏+]

在JVM中表示两个class对象是否是同一个类存在两个必要条件:

  • 类的完整类名必须一致,包括包名
  • 加载这个类的ClassLoader(ClassLoader实例对象)必须相同

换句话说,在JVM中,即使这两个类对象(class对象)来源于同一个class文件,被同一个虚拟机加载,但只要加载他们的ClassLoader实例对象不同,那么这两个类对象也是不相同的

JVM必须知道一个类是由启动类加载器还是用户类加载器加载的

      如果一个类是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类信息的一部分保存在方法区中。

类的主动使用和被动使用

主动使用

  • 创建类的实例
  • 访问某个类或接口的静态变量,或者对该静态变量赋值
  • 调用类静态方法
  • 反射(比如Class.forName("com.xxx.Test")
  • 初始化一个类的子类
  • Java虚拟机启动时被标明为启动类的类
  • JDK7开始提供的动态语言支持:java.lang.invoke.MethodHandle实例的解析结果、REF_getStatic、REF_putStatic、REF_invokeStatic句柄对应的类没有初始化,则进行初始化

被动使用

       除了主动调用的七种情况,其他使用Java类的方式都被看做是对类的被动使用,都不会导致类的初始化

jvm类加载补充

原文:https://www.cnblogs.com/xiaopan-cp9/p/13639895.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!