类加载器包括:
(1)启动类加载器(Bootstrap ClassLoader)
hotspot中是使用c++实现的,负责加载jdk\jre\lib中的类库(如rt.jar), java程序无法引用启动类加载器
(2)扩展类加载器 (Extension ClassLoader)
负责加载jdk\jre\lib\ext 目录中的类,或者由java.ext.dirs系统变量指定的路径中的类库
(3)应用类加载器(Application ClassLoader)
(4)用户自定义类加载器
JVM类加载机制特点包括:
(1)全盘负责
一个类负责加载某个Class时,该Class所依赖和引用的Class也将由该类加载器负责加载,除非显示使用另一个类加载器加载
(2)父类委托
只有父类加载器无法加载的时候才会尝试使用自己加载
(3)缓存机制
这就是为什么修改一个Class后需要重启JVM
类的加载方式包括:
(1)命令行启动应用时由JVM初始化装载
(2)通过Class.forName() 方法动态加载,默认会执行初始化块
(3)通过ClassLoader.loadClass()方法动态加载,不会执行初始化块