JVM(二):类加载器和双亲委派

50 阅读1分钟

1.类加载器

BootstrapClassLoader(启动类加载器)

  • 最顶层的加载类,由C++实现
  • 负责加载%JAVA_HOME%lib目录下的jar包和类,或者被-Xbootclasspath参数指定的路径中的所有类

ExtensionClassLoader(扩展类加载器)

  • 由Java实现,继承自java.lang.ClassLoader
  • 负责加载%JAVA_HOME%/lib/ext目录下的jar包和类,或者被java.ext.dirs系统变量所指定的路径下的jar包

AppClassLoader(应用程序类加载器)

  • 由Java实现,继承自java.lang.ClassLoader
  • 面向用户的加载器,负责加载当前应用classpath下的所有jar包和类

2 双亲委派模型

  • 在类加载时,系统首先判断当前类是否被加载过

  • 已经被加载过的类会直接返回

  • 否则尝试自己加载

    • 加载时,首先将该请求委派给父类加载器的loadClass()处理,即所有请求最终都会传送到顶层的BootstrapClassLoader
    • 当父类加载器无法处理时,才自己加载
    • 当父类加载器为NULL时,使用BootstrapClassLoader作为父类加载器