[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(系统类加载器)
负责加载程序的主函数类。
除此之外,还有用户自定义的加载类,用于实现自己需要的加载操作。
浙公网安备 33010602011771号