类加载器

类加载器

   类的加载是由类加载器完成的。类加载器可以分为两种:第一种是Java虚拟机自带的类加载器,分别为启动类加载器、扩展类加载器和系统类加载器。第二种是用户自定义的类加载器,是java.lang.ClassLoader的子类实例。

 虚拟机内置加载器 

  根类加载器(Bootstrap)

   根类加载器是最底层的类加载器,是虚拟机的一部分,它是由C++语言实现的,且没有父加载器,也没有继承 java.lang.ClassLoader 类。它主要负责加载由系统属性 "sun.boot.class.path" 指定的路径下的核心类库(即<JAVA_HOME>\jre\lib),出于安全考虑,根类加载器只加载 java、javax、sun开头的类。

扩展类加载器(Extension)

扩展类加载器是指由原SUN公司实现的 sun.misc.Launcher$ExtClassLoader类(JDK9是 jdk.internal.loader.ClassLoaders$PlatformClassLoader类),它是由java语言编写,父加载器是根类加载器。负责加载<JAVA_HOME>\jre\lib\ext目录下的类库或者系统变量"java.ext.dirs"指定目录下的类库。

系统类加载器(System)

  系统类加载器也称之为应用类加载器,也是纯java类,是原SUN公司实现的 sun.misc.Launcher$AppClassLoader 类(JDK9是 jdk.internal.loader.ClassLoaders$AppClassLoader)。它的父加载器是扩展类加载器。它负责从classpath环境变量或者系统属性java.class.path所指定的目录中加载类,它是用户自定义的类加载器的默认父加载器。一般情况下,该类加载器是程序中默认的类加载器,可以通过ClassLoader.getSystemClassLoader() 直接获得。

 

posted @ 2021-04-12 22:32  一名不断学习的程序猿  阅读(52)  评论(0)    收藏  举报