【JVM】ClassLoder (双亲委派机制)

类从编译到执行的过程

【JVM】ClassLoder (双亲委派机制)_第1张图片

ClassLoader

通过ClassLoader类加载器把class文件加载到JVM内存中,生成class对象【如何加载.class文件】
loadClass() :加载到类,返回实例
种类
【JVM】ClassLoder (双亲委派机制)_第2张图片
ExtClassLoader:getExtDirs()查询路径中需要的class文件,加载
AppClassLoader:加载classpath目录下定义的class

自定义ClassLoader的实现

findClass(String):加载字节码
defineClass(byte[]):解析字节码返回对象
ClassLoader的源码

类加载器的双亲委派机制

  1. 加载一个类时,首先查看当前ClassLoader有没有加载过(加载过即表示之前加载过并放放置在缓存中了,查看缓存中有没有)getClassLoader()
  2. 若加载过则直接返回;否则查看其父类 getClassLoader().getParent()有没有加载过此类,层层递归直到顶层,加载过就返回
  3. 若还没有找到,则让当前ClassLoader执行真正的加载过程

【JVM】ClassLoder (双亲委派机制)_第3张图片
优势

  • 提高了类加载的效率
  • 系统类被提前加载,提高了系统的安全性

为什么要使用双亲委派机制去加载类

避免多份同样字节码的加载

补充学习点

深入理解ClassLoader工作机制(jdk1.8)
ClassLoader 详解及用途

注:以上图片来源:慕课-翔仔

你可能感兴趣的:(Java)