类加载的作用: 将 class 文件字节码内容加载到内存中, 并将这些静态数据转换成方法区的运行时数据结构, 然后在堆中生成一个代表这个类的 java.lang.Class 对象, 作为方法区中类数据的访问入口.
类缓存: 标准的 JavaSE 类加载器可以按要求查找类, 但一旦某个类被加载到类加载器中, 它将维持加载 (缓存) 一段时间, 不过 JVM 垃圾回收机制 (gc) 可以回收这些 Class 对象.
JVM 规范定义了如下类型的类的加载器
引导类加载器(根加载器): 用 C++ 编写, 是 JVM 自带的类加载器, 负责 java 平台核心库, 用来装载核心库. 该加载器无法直接获取
扩展类加载器: 负责 jre/lib/ext 目录下的 jar 包或 - D java.ext.dirs 指定目录下的 jar 包装入工作库
系统类加载器: 负责 java -classpath 或 - D java.class.path 所指的目录下的类与 jar 包装入工作, 是最常用的加载器.
测试用例:
双亲委托机制:
简单来说就是加载一个类进内存, 先从系统类加载器找, 往上从扩展类中找, 往上再从根加载器中找.
来源: http://www.bubuko.com/infodetail-3395015.html