JVM类加载器
类加载器:引导类加载器、扩展类加载器、系统/应用类加载器
按JVM官方进行分类(两种划分方法)
按类划分
- 引导类加载器(Bootstrap ClassLoader)
- 自定义类加载器(直接或间接继承
ClassLoader
类的类加载器)
按实现语言划分
- Bootstrap ClassLoader (C++、C实现的)
- 其他类加载器(Java实现的)
引导类加载器(BootStrap ClassLoader)
- 引导类加载器是使用C++和C实现的,嵌套在JVM内部
- 主要用于加载Java核心类库(JAVA_HOME、jre、lib、rt.jar、resource.jar、sun.boot.class.path路径下的内容);(我们不能获取该加载器实例)
- 可用于扩展类和系统类加载器加载,是他们的父类
- 出于安全考虑,引导类加载器只加载包名为java、javax、sun等开头的类
扩展类加载器(Extension ClassLoader)
- Java语言实现
- 派生于ClassLoader类
系统/应用类加载器(Application ClassLoader)
- Java语言实现
- 派生于ClassLoader类
- 负责加载环境变量classpath或系统属性java.class.path.路径下的类库
- 该类加载器是程序中默认的类加载器,一般Java应用的类都是它来加载
使用 (class).getClassLoader()可以获得它的类加载器
自定义类加载器的使用
场景
- 隔离加载类
- 修改类加载的方式
- 扩展加载源
- 防止源码泄露
步骤
- 继承ClassLoader类,也可以继承URLClassLoader类(简洁一点)
- 重写finClass()方法即可
资料来源:B站尚硅谷