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作为加载器。
28 类加载器_第1张图片

双亲委派模型的好处

可以避免类重复加载。因为相同的类被不同的加载器加载产生的是两个不同的类。

你可能感兴趣的:(java)