类加载器的作用
- 类加载的作用:将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包装入工作,是最常用的加载器。
测试用例:
双亲委托机制:
简单来说就是加载一个类进内存,先从系统类加载器找,往上从扩展类中找,往上再从根加载器中找。