hooyantsing's Blog

P032 引导类、扩展类、系统类加载器的使用及演示

字数统计: 369阅读时长: 1 min
2022/03/10

视频源:尚硅谷宋红康JVM全套教程(详解java虚拟机)

1. 启动类加载器(引导类加载器 Bootstrap ClassLoader)

  • 这个类加载使用 C/C++ 语言实现,嵌套在 JVM 内部;
  • 它用来加载 Java 的核心库(JAVA_HOME/jre/lib/rt.jar、resources.jar 或 sun.boot.class.path 路径下的内容),用于提供 JVM 自身需要的类;
  • 并不继承自 java.lang.ClassLoader,没有父加载器;
  • 处于安全考虑,Bootstrap 启动类加载器只能加载包名为 java、javax、sun等开头的类。

2. 扩展类加载器(Extension ClassLoader)

  • Java 语言编写,由 sun.misc.Launcher$ExtClassLoader 实现;
  • 派生于 ClassLoader 类;
  • 父类加载器为启动类加载器;
  • 从 java.ext.dirs 系统属性所指定的目录中加载类库,或从 JDK 的安装目录 jre/lib/ext 子目录(扩展目录)下加载类库。如果用户创建的 JAR 放在此目录下,也会自动由扩展类加载器加载。

3. 应用程序类加载器(系统类加载器 AppClassLoader)

  • Java 语言编写,由 sun.misc.Launcher$AppClassLoader 实现;
  • 派生于 ClassLoader 类;
  • 父类加载器为扩展类加载器;
  • 它负责加载环境变量 classpath 或系统属性 java.class.path 指定路径下的类库;
  • 该类加载是程序中默认的类加载器,一般来说,Java应用的类都是由它来完成加载的;
  • 通过 ClassLoader#getSystemClassLoader() 方法可以获取到该类加载器。
CATALOG
  1. 1. 1. 启动类加载器(引导类加载器 Bootstrap ClassLoader)
  2. 2. 2. 扩展类加载器(Extension ClassLoader)
  3. 3. 3. 应用程序类加载器(系统类加载器 AppClassLoader)