时隔一年多又重新翻阅了一边j<深入理解java虚拟机> 一书对其写的知识又了更好的认识,所以决定做下笔记。
作为java开发者虚拟机好多的技术和理论我们只需要知道皮毛即可,但是个人觉得有些知识作为程序员还是必须要知道的。
类加载机就是我们必须掌握之一。
类加载时间
虚拟机开始加载类开始,到卸载为止,是整个的生命周期。
流程包括
类加载----->验证----->准备----->解析----->初始化----->使用----->销毁
类加载:是指虚拟机加载包含class数据的二进制流
验证:是指验证二进制流中的信息是符合当前虚拟机的要求,是否有危害到虚拟机。
包括验证文件格式 元数据 字节码 符号引用等。
准备:是正式为类分配内存和对变量进行初始化值(需要注意是初始化,而不是赋值)
解析:是指虚拟机将常量池内的符号引用替换为直接引用。
包括 类接口的解析 属性的解析 方法的解析 接口方法的解析
初始化: 简单理解就是通过类对变量的定义赋值 来对已经在类准备过程中默认虚拟机初始化值做改变
值得注意的是 静态语句块只能访问 静态语句之前的变量 。static修饰的只会在内存保存一份
public class Test{
static int i=0;
static{
i=1;
System.out.println(i);//编译正常使用语句之前变量
n =1 ;
System.out.println(n) //编译失败,其实和类加载顺序有关 。个人理解 n还没有初始化呢
}
static int n=0;
}
使用:理解为调用即可。
销毁:使用完毕释放内存。
个人理解,如有不对 希望大神指出