JVM模型
- 方法区:存储类信息、静态成员
- 堆:对象、常量池
- 栈:非静态成员
- 程序计数器
JVM类加载
定义:Java虚拟机把描述类的数据从编译好的 .class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的内部表示形式,这个过程被称作虚拟机的类加载机制。
-
加载:通过全限定类名找到 .class 文件,通过字节流读入内存
-
连接
1)验证:
2)准备: 为静态成员变量分配内存和初始化默认值
3)解析:
-
初始化:对静态成员变量进行显示赋值、执行静态代码块、执行类加载器
-
卸载:
类加载器
-
BootStrap ClassLoader (启动类加载器)
- 执行优先级最高的类加载器
- 用于加载
JRE核心类库的.jar文件,如rt.jar - 使用
C语言实现,双亲委派顶级祖宗加载器
-
Extensions ClassLoader 也称 (Ext ClassLoader) (扩展类加载器)
- 用于加载
JRE扩展目录下的.jar文件 - 使用
Java实现
- 用于加载
-
Application ClassLoader (应用程序类加载器)
- 用于加载用户自己编写的类文件,和项目中引用其他
.jar包中的类文件
- 用于加载用户自己编写的类文件,和项目中引用其他
-
Custom ClassLoader (自定义加载器)
- 用于加载指定目录下的类,通常用于自定义实现
双亲委派机制
双亲委派模型其表达的意思是,类加载器与父亲加载器嵌套,当需要加载类的时候回去现寻找父亲加载器,如果有父亲加载器的话就优先使用父亲加载器,如果父亲加载器无法完成加载的话,再使用自己进行加载。