类加载器就像搬运工,把.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作为加载器。

双亲委派模型的益处

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