JVM 类加载器

Posted 米突小搞羊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM 类加载器相关的知识,希望对你有一定的参考价值。

【概述】

  虚拟机设计团队把类加载阶段中的 “通过一个类的全限定名来获取描述此类的二进制字节流” 这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为 “类加载器”。

  类加载器可以说是 Java 语言的一项创新,也是 Java 语言流行的原因之一,它最初是为了满足 Java Applet 的需求而开发出来的。虽然目前 浏览器上的 Java Applet 技术基本上已经 “死掉”,但类加载器却在类层次划分、OSGI、热部署、代码加密等领域大放异彩,成为 Java 技术体系的一块重要的基石。


【Q】:如何判断两个类是否 “相等”?

【A】:类加载器虽然只用于实现类的加载动作,但它在 Java 程序中起的作用却远远不限于类的加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。也可以说,比较两个类是否 “相等”,只有这两个类时由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。

  这里所指的“相等”,包括代表类的 Class 对象的 equals() 方法、isAssignableFrom() 方法、isInstance() 方法的返回结果,也包括使用 instanceof 关键字做对象所属关系判定等情况。如果没有注意到类加载器的影响,在某些情况下可能会产生迷惑性的结果,下面的代码展示了不同类加载器对 instanceof 关键字运算的结果的影响。

 

以上是关于JVM 类加载器的主要内容,如果未能解决你的问题,请参考以下文章

JVM学习记录-类加载器

JVM类加载

JVM快速入门

JVM探究之 —— 类加载器-双亲委派模型

JVM -- 类加载器;双亲委派机制;线程上下文类加载器

JVM -- 类加载器;双亲委派机制;线程上下文类加载器