快速业务通道

JVM中的对象生命周期详解 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

JVM中的对象生命周期详解

时间:2011-06-19 iteye 小丑鱼

在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段 (Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段 (Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放 阶段(Free)。上面的这7个阶段,构成了 JVM中对象的完整的生命周期。下面 分别介绍对象在处于这7个阶段时的不同情形。 

创建阶段

在对象创建阶段,系统要通过下面的步骤,完成对象的创建过程:

(1)为对象分配存储空间。

(2)开始构造对象。

(3)递归调用其超类的构造方法。

(4)进行对象实例初始化与变量初始化。

(5)执行构造方法体。

上面的5个步骤中的第3步就是指递归地调用该类所扩展的所有父类的构造方 法,一个Java类(除Object类外)至少有一个父类(Object),这个规则既是强 制的,也是隐式的。你可能已经注意到在创建一个Java类的时候,并没有显式地 声明扩展(extends)一个Object父类。实际上,在 Java程序设计中,任何一个 Java类都直接或间接的是Object类的子类。例如下面的代码:

public class A {       … } 这个声明等同于下面的声明: public class A extends java.lang.Object {       … }

上面讲解了对象处于创建阶段时,系统所做的一些处理工作,其中有些过程 与应用的性能密切相关,因此在创建对象时,我们应该遵循一些基本的规则,以 提高应用的性能。

下面是在创建对象时的几个关键应用规则:

(1)避免在循环体中创建对象,即使该对象占用内存空间不大。

(2)尽量及时使对象符合垃圾回收标准。

(3)不要采用过深的继承层次。

(4)访问本地变量优于访问类中的变量。

关于规则(1)避免在循环体中创建对象,即使该对象占用内存空间不大,需 要提示一下,这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的 错误,例如下面的代码:

… … for (int i = 0; i < 10000; ++i) {      Object obj = new Object();      System.out.println("obj= "+ obj); } … …

上面代码的书写方式相信对你来说不会陌生,也许在以前的应用开发中你也 这样做过,尤其是在枚举一个Vector对象中的对象元素的操作中经常会这样书写 ,但这却违反了上述规则(1),因为这样会浪费较大的内存空间,正确的方法 如下所示:

… … Object obj = null; for (int i = 0; i < 10000; ++i) {      obj = new Object();      System.out.println("obj= "+ obj); } … …

JVM中的对象生命周期详解(2)

时间:2011-06-19 iteye 小丑鱼

采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像 上面的第一种编写方式中代码会在内存中产生大量的对象应用,浪费大量的内存 空间,而且增大了系统做垃圾回收的负荷。因此在循环体中声明创建对象的编写 方式应该尽量避免。

另外,不要对一个对象进行多次初始化,这同样会带来较大的内存开销,降 低系统性能,如:

public class A {    private Hashtable table = new Hashtable ();    public A() {      // 将Hashtable对象table初始化了两次       table = new Hashtable();    } }

正确的方式为:

public class B {     private Hashtable table = new Hashtable ();     public B() {     } }

不要小看这个差别,它却使应用软件的性能相差甚远,如图2-5所示。

图2-5  初始化对象多次所带来的性能差别

看来在程序设计中也应该

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号