[java] 类加载和双亲委派模型

1. JVM类加载

  JVM类加载采用按需求加载模式,也就是说只有在用到该类时,才会将对应的class类文件加载到内存中并生成class对象。JVM在加载类时采用双亲委派机制,即将加载请求交给父类处理。

2. 双亲委派机制

  1)如果类加载器收到了加载请求,它会优先将请求委托到父类加载器去执行。

  2)如果父类加载器亦有父类加载器,那么会层层向上传递请求,最终加载请求会到达顶层的引导类加载器。

  3)若父类加载器可以完成任务,那么会由它完成,否则会返回任务给子类,让子类自行处理。

  4)如果一层层向下分配任务,到最后也无法加载类,就会抛出异常。

  机制作用:

  1)防止重复加载同一个类(会全局维护一个已加载类的表)。

  2)保证核心class的安全(因此需要层层上传任务),不同加载器加载同一个类,得到的类对象也不同,可以保证执行安全。

3. 类加载器的类别

  JVM中提供了三层ClassLoader

  1)BootstrapClassLoader(启动类加载器)

  负责架子核心类库(java.lang.*等),并构造ExtClassLoader和AppClassLoader。BootstrapClassLoader是JVM自带的内部类,用cpp编写,不能被开发者引用和操作。

  2)ExtClassLoader(标准扩展加载器)

  负责jre/lib/ext目录下扩展jar中类的加载。java编写,可悲开发者使用到。、

  3)AppClassLoader(系统类加载器)

  负责加载程序的主函数类。

  除此之外,还有用户自定义的加载类,用于实现自己需要的加载操作。

 

posted @ 2022-08-23 14:32  Cheung-10  阅读(22)  评论(0)    收藏  举报