JVM之类加载相关简析
一、简介
关于JVM在类加载这个部分涉及到的知识点,可以分为3个部分,即:
类加载的流程、类加载器、类加载的机制
二、类加载流程
类加载的流程,即当程序使用某个类时,所需要的步骤,如下:
加载:加载指把要加载类的class文件读入内存,并创建Class对象
连接:连接是把类的二进制数据合并到jre中,分3个阶段
验证:检测被加载的类是否有正确的结构
准备:负责为类的静态变量分配内存,设置默认值
解析:将类的二进制数据中的符号引用替换为直接引用
初始化:主要是为静态变量做初始化
关于类的初始化,总结起来可以概括为一句话,什么时候使用什么时候初始化。
三、类加载器
类加载器以 jdk1.8 为例,可以大致分为四种:
Bootstrap ClassLoader :根(启动)类加载器,负责加载Java核心类。
Extension ClassLoader:扩展类加载器,负责加载 jre 的扩展目录中的 Jar 包。
ApplicationClassLoader:应用程序类加载器,负责加载classpath相关的Jar包或属性。
用户自定义类加载器
类加载器之间的父子关系没有继承的关系,而是层次的关系,JDK1.8可以理解为:
根类加载器——》扩展类加载器——》系统类加载器——》用户自定义类加载器
四、类加载机制
全盘负责机制:类加载器加载一个类,那么这个类相关的依赖和引用也要被加载,除非显示要使用另一个类加载器
双亲委派机制:当要加载一个类时,先向上抛让父类去加载,如果父类加载不了,再由子类尝试加载
缓存机制:所有被加载过得类都会有缓存,所以一旦修改了class文件,就要重启JVM,程序的修改才会生效