基础 -- Java笔记3--.class文件的流程
Java笔记3–.class文件的流程
2016年1月20日
14:51
JAVA运行过程:
关于装载:
java文件经过编译会形成一个class文件,class程序代码只有在初次被使用时才会被装载。
首次使用class的时间点是静态初始化的进行时机,static对象或者程序区被装载时,是依据他们在程序代码中的次序。
1.找到main方法,故事由这个类开始展开
2.装载这个类的父类(如果父类仍有父类,则总是先装载父类,递归装载)
3.装载该类 1)static修饰的代码块,变量,方法依次执行
2)执行main方法中的代码
(成员变量的赋值是在对象的创建后完成的)
class生命周期:
1.装载:将.class文件加载进入jvm的运行时数据区的方法区中以二进制数据流的方式存储,同时在堆中创建java.lang.Class对象,这个对象封装了类在方法区中的数据结构,作为方法区中这个类的信息入口。
2.连接:1)验证:验证文件格式和各种细节与jvm是否兼容之类的事。
2)准备:为类的静态变量分配内存并设为jvm默认的初值,对于非静态的变量,则不会为它们分配内存。注意,静态变量的初值为jvm默认的初值,而不是我们在程序中设定的初值。
3)解析:把常量池中的符号引用转换为直接引用,符号引用就是一个类中对另一个类的方法的调动语句。直接引用是指向对象的指针。
3.初始化: 类的初始化 实例化对象
4使用:主动引用–会引起类的初始化
被动引用–不会引起类的初始化
5.卸载:
在类使用完之后,如果满足下面的情况,类就会被卸载:
1. 该类所有的实例都已经被回收,也就是java堆中不存在该类的任何实例。
2. 加载该类的ClassLoader已经被回收。
3. 该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法。
如果以上三个条件全部满足,jvm就会在方法区垃圾回收的时候对类进行卸载,类的卸载过程其实就是在方法区中清空类信息,java类的整个生命周期就结束了。
已使用 Microsoft OneNote 2016 创建。
