加载
当我们要使用一个类的时候,要通过ClassLoader将类加载到内存中
类加载阶段主要完成如下三件事情
- 通过全类名,获取类的二进制流
- 解析类的二进制流为方法区内的数据结构
- 创建一个java.lang.Class类的实例,表示该类型,作为方法区这个类的访问入口
通过全类名,获取类的二进制流的方式有很多种
- 从zip压缩包中获取
- 从网络中获取
- 运行时计算生成,如动态代理技术
- …
对于非数组类型的加载阶段,即可以使用Java虚拟机内置的类加载器去完成,也可以使用用户自定义的类加载器去完成
链接
链接这个阶段主要分为3个部分,验证,准备,解析
验证
验证阶段主要是确保Class文件的格式正确,运行时不会危害虚拟机的安全
验证阶段的规则很多,但大致分为如下4个阶段