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 创建。