天天看点

JVM-类与类加载器-《深入理解Java虚拟机》学习笔记

类与类加载器

双亲委派模型
从 Java 虚拟机角度讲,只存在两种类加载器:一种是启动类加载器(C++ 实现,是虚拟机的一部分);另一种是其他所有类的加载器(Java 实现,独立于虚拟机外部且全继承自 java.lang.ClassLoader)
  1. 启动类加载器

    加载 lib 下或被 -Xbootclasspath 路径下的类

  2. 扩展类加载器

    加载 lib/ext 或者被 java.ext.dirs 系统变量所指定的路径下的类

  3. 应用程序类加载器

    ClassLoader负责,加载用户路径上所指定的类库。

    JVM-类与类加载器-《深入理解Java虚拟机》学习笔记

除顶层启动类加载器之外,其他都有自己的父类加载器。

工作过程:如果一个类加载器收到一个类加载的请求,它首先不会自己加载,而是把这个请求委派给父类加载器。只有父类无法完成时子类才会尝试加载。

破坏型双亲委派
类加载机制和双亲委派机制

类加载机制就是虚拟机描述类的数据从Class文件加载到内存,对其进行转换解析,最后形成可以被虚拟机直接使用的Java类型,这就是类加载机制。

双亲委派机制就是对象接受请求后不会先尝试自己去加载,而是委派给父类去加载,父类也不会直接加载,而是尝试委派给父类去加载,最后都委派到顶层的启动类加载器中,若顶层的启动类加载器无法加载,就交给下一级,下一级加载不了再交给下一级,最后若自己无法加载则抛出异常。主要说就是有优先级的特点。