乐趣区

关于java:28-类加载器

类加载器就像搬运工,把.class 文件搬进 jvm 里。

类加载器

jvm 内置三个 classLoader,除了 bootstrapClassLoader 其余类加载器由 java 实现,并继承自 java.lang.classloader

  • bootstrapClassLoader:启动类加载器,c++ 实现,最顶层的加载类,负责加载 javahome/bin 目录下的 jar 包或者被 -xbootclasspath 参数指定的门路中的所有类。
  • extensionClassLoader: 负责加载 jreHome/lib/ext 目录下的 jar 包,或被 java.ext.dirs 零碎变量指定的门路下的 jar 包
  • appClassLoader:应用程序类加载器,负责加载以后利用 classpath 下的 jar 包。

双亲委派模型

每个类都有对应的类加载器。
类加载时,会先判断以后类是否被加载过,已加载过的类会间接返回,没加载过会判断其父类是否加载过。齐全没加载过,会先委派父类的加载器解决,父类加载器解决不了才会由本人解决。
因而所有的申请最终都传送到 bootStrapClassLoader 中。
当父类加载器为 null 时,会应用 bootStrapClassLoader 作为加载器。

双亲委派模型的益处

能够防止类反复加载。因为雷同的类被不同的加载器加载产生的是两个不同的类。

退出移动版