从 j2se 1.2 开始, jvm 使用三种 loader :引导类载入器( bootstrap class loader),扩展类载入器(extension class loader)和系统类载入器(system class loader)。这三种有着父子继承关系(引导类载入位于最高层)。
- 引导类载入器
(bootstrap class loader)用于引导 jvm。当使用 java 命令时,引导类载入器开始工作。引导类载入是使用本地方法实现的,因为它要负责载入启动 jvm 的类。此外,它还要负责载入 java 核心类,
例如 java.io 和 java.lang 包下的类,它的搜索路径包括 rt.jar 和 i18n.jar 等包,具体查找哪些包依赖于 jvm 和操作系统的版本。
- 扩展类载入器
(extension class loader)负责载入标准扩展目录下的类。这有利与程序开发,因为程序员只需要将 jar 包拷贝到扩展目录中,扩展类载入器会从这些 jar 包中查找需要的类。 扩展目录依赖于 jvm 的
具体实现。sun 的 jvm 实现中标准扩展目录是“/jdk/jre/lib/ext”。
- 系统类载入器
(system class loader)是默认的类载入器,从 CLASSPATH 中搜索需要的类。