Java类加载器的工作原理及作用有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4477个文字,预计阅读时间需要18分钟。
类加载机制+类加载器负责加载所有类,系统为所有被加载入内存中的类生成一个java.lang.Class实例。一旦一个类被加载入JVM中,相同的类就不会再次被加载。当前的问题是,如何计算类的定义?
类加载机制
类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个 java.lang.Class 实例。一旦一个类被载入 JVM 中,同个类就不会被再次载入了。现在的问题是,怎么样才算“同一个类”?
正如一个对象有一个唯一的标识一样,一个载入 JVM 中的类也有一个唯一的标识。在 Java 中,一个类用其全限定类名(包括包名和类名)作为标识:但在 JVM 中,一个类用其全限定类名和其类加载器作为唯一标识。例如,如果在 pg 的包中有一个名为 Person 的类,被类加载器 ClassLoader 的实例 k1 负责加载,则该 Person 类对应的 Class 对象在 JVM 中表示为(Person、pg、k1)。这意味着两个类加载器加载的同名类:(Person、pg、k1)和(Person、pg、k12)是不同的,它们所加载的类也是完全不同、互不兼容的。
当 JVM 启动时,会形成由三个类加载器组成的初始类加载器层次结构。
- Bootstrap ClassLoader:根类加载器。
- Extension ClassLoader:扩展类加载器。
- System ClassLoader:系统类加载器。
Bootstrap ClassLoader 被称为引导(也称为原始或根)类加载器,它负责加载 Java 的核心类。
本文共计4477个文字,预计阅读时间需要18分钟。
类加载机制+类加载器负责加载所有类,系统为所有被加载入内存中的类生成一个java.lang.Class实例。一旦一个类被加载入JVM中,相同的类就不会再次被加载。当前的问题是,如何计算类的定义?
类加载机制
类加载器负责加载所有的类,系统为所有被载入内存中的类生成一个 java.lang.Class 实例。一旦一个类被载入 JVM 中,同个类就不会被再次载入了。现在的问题是,怎么样才算“同一个类”?
正如一个对象有一个唯一的标识一样,一个载入 JVM 中的类也有一个唯一的标识。在 Java 中,一个类用其全限定类名(包括包名和类名)作为标识:但在 JVM 中,一个类用其全限定类名和其类加载器作为唯一标识。例如,如果在 pg 的包中有一个名为 Person 的类,被类加载器 ClassLoader 的实例 k1 负责加载,则该 Person 类对应的 Class 对象在 JVM 中表示为(Person、pg、k1)。这意味着两个类加载器加载的同名类:(Person、pg、k1)和(Person、pg、k12)是不同的,它们所加载的类也是完全不同、互不兼容的。
当 JVM 启动时,会形成由三个类加载器组成的初始类加载器层次结构。
- Bootstrap ClassLoader:根类加载器。
- Extension ClassLoader:扩展类加载器。
- System ClassLoader:系统类加载器。
Bootstrap ClassLoader 被称为引导(也称为原始或根)类加载器,它负责加载 Java 的核心类。

