1. 类的加载
1 在Java代码中,类型的加载、连接和初始化过程都是在程序运行期间完成的
2 加载:将Class文件从本地磁盘加载到类型
3 连接:
4 验证:确保加载的类的正确性
5 准备:为类的静态变量分配内存,然后初始化默认的值
6 解析: 将类中的符号引用变成直接引用
7 初始化:为类的静态变量的赋与初始化的值
8 使用: 正常的使用
9 卸载: 不去使用他了则从内存中删除(OSGI)
2. Java对类的使用方式
1 Java对类的使用方式有两种
2 主动使用
3 被动使用
4 所有的Java虚拟机的实现都必须要遵循Java类或者接口首次主动使用的时候才会初始化他们
5 主动使用的场景
6 创建类的实例
7 访问某一个类或者接口的静态变量(getstatic)或者对该静态变量进行赋值(putstati
c)
8 调用类的静态方法(invokestatic)
9 反射:Class.forName()
10 初始化子类: 初始化子类的时候父类也会初始化
11 Java虚拟机标记为启动的那个类(main方法,Test注解)
12 JDK1.7开始支持动态语言的支持,java.lang.invoke.MethodHandle实例的解析
13 结果REF_getStatic,REF_putStatic,REF_invokeStatic菊花对应的类没有初始化则会
初始化
14 被动加载:
15 除了上面7中情况,其余使用Java类的方式都是被动使用,被动使用不会导致类的初始化,
16 但是可能被加载类
3. 类的加载的过程
1 类的加载是指将.class的二进制文件加载到内存中,并将其放在运行时的方法区中(1.7之
前),
2 然后为其创建一个java.lang.Class类型的对象,用来存放类在方法区中的数据结构(值得
一提的是
3 JVM规范并没有规定该Class类型的对放在那里,hotspot虚拟机是放在方法区中的)
4. 加载.class文件的方式
1 从本地系统中直接加载
2 通过网络下载
3 从zip,jar等归档文件中加载
4 从数据库中提取.class文件 |
|