jvm类加载
java类的生命周期
加载、验证、解析、准备、初始化
- 加载 查找并加载类的二进制数据
- 验证 确保被加载的类符合class文件的格式,java版本号,保证文件能够被正确解析
- 准备 为类的成员变量分配内存,初始化静态变量
- 解析 把类中的符号引用替换成直接引用
- 初始化 对类的变量初始化赋值
jvm的类加载机制
- 全盘负责:当一个类加载器负责加载class时,该class所依赖和引用的其他class也将由该类加载器加载除非显示使用另一个类加载器加载
- 父类委托:先让父类加载器试图加载,只有在父类加载器在无法加载该类的时候使用子类加载器加载,如果类不存在报classnotfount异常
- 缓存机制: 缓存机制保证所有被类加载器加载的class都会被缓存,当程序中需要加载某个class时,类加载器首先从缓存区加载该class,只有在缓存区找不到该class时才从类路径加载二进制数据,并将其转换成class对象,存入缓存区,所以修改了class后,必须重启jvm程序的修改才能生效
- 双亲委派模型: 当类加载器收到加载类的请求时,首先委托父类加载器加载,如果父类加载器无法加载,子类加载器才会尝试加载
- 三种类加载器 根类加载器 扩展类加载器 系统类加载器