类加载的过程
加载
1. 获取二进制类的字节流
2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3. 在内存中生成代表这个类的对象
链接之验证
目的是确保class文件的字节流中包含的信息符合jvm虚拟机规范的全部约束。
验证阶段大致完成四个检验动作:文件格式验证,元数据验证,字节码验证,符号引用验证。
链接之准备
为类中的静态变量分配内存并设置初始值。应在方法区中进行分配。
链接之解析
将常量池中的符号引用替换为直接引用的过程。
符号引用:用一组符号来买描述所引用的目标。符号引用与虚拟机实现的内存布局无关。
直接引用:直接指向目标的指针,相对偏移量或一个能间接定位到目标的句柄。和内存布局直接相关。
初始化
就是执行类构造器()方法的过程。()是Javac编译器自动生成的。
()是由编译器自动收集类中所有类变量的赋值动作和静态语句块中的语句合并产生的。