JVM系列之三:JVM之java类型生命周期详解

前一篇文章详细的描述了 java class 文件的格式  。它以标准的二进制形式来表现java 类型。现在我们再来看看当二进制的类型数据被导入到java虚拟机中的生命周期是什么样子的,下文所说的生命周期指的是 java 类型二进制的类型数据被导入到java虚拟机中的生命周期的。

生命周期可分为 装载、连接、初始化、对象实例化、垃圾收集、对象终结以及卸载 7个阶段。接下来我们对这些阶段一一解释。

  1. 装载
    装载由三个基本动作完成:1、通过该类型的完全限定名,产生一个代表该类型的二进制数据流  2、解析这个二进制数据流为方法区的内部数据结构  3、创建一个表示该类型的 java.lang.Class 类的实例。加载的详细过程见 JVM系列之二:ClassLoad 详解

  2. 连接
    连接阶段可分为三个子步骤:验证、准备和解析。验证 步骤确保了Java 类型数据格式正确并且适于Java 虚拟机使用。 准备步骤则负责为该类型分配它所需的内存,设置默认的初始值。解析步骤则负责把常量池中的符号引用转换为直接引用。虚拟机的实现可推迟解析这一步,他可以在 当运行中的程序真正使用某个符号引用时再去解析(把常量池中的符号引用转换为直接引用)。

  3. 初始化
    当验证、准备和(可选的)解析步骤都完成时,该类型就已经为初始化做好了准备,在初始化期间,都将给类变量以适当的初始值。

  4. 对象实例化
    在java程序中,类可以被明确或者隐含的实例化。实例化一个类有四种途径:1、明确的使用new 操作符 2、调用Class 或者 java.lang.reflect.Constructor 对象的 newInstance() 3、调用任何现有对象的 clone() 方法 4、通过 java.io.ObjectInputStream类的 getObject()方法反序列化

  5. 垃圾收集与对象终结
    一个终结方法是一个普通的java方法,他可以直接诶程序所调用。这样的直接调用不会影响垃圾收集齐的自动调用过程。垃圾收集器(最多)只会调用一个对象的终结方法一次——在对象编程不再被引用的之后的某个时候,在占据的对象被重用之前。如果终结方法代码执行后,对象重新被引用了(复活了),随后再次变得不被引用,垃圾收集齐不会第二次调用终结方法。
    垃圾收集器自动调用的 finalize()方法抛出的任何异常都将被忽略。垃圾收集齐可以用任意的顺序调用 finalize() 方法,使用任意线程,升值并行使用多线程。

  6. 卸载
    JVM 装载、连接并初始化类,使程序能使用类,当程序不再引用他们的时候可选的卸载他们。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章