快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
遵从“勿以恶小而为之”的古训,否则我们开发出 来的应用也是低效的应用,有时应用软件中的一个极小的失误,就会大幅度地降 低整个系统的性能。因此,我们在日常的应用开发中,应该认真对待每一行代码 ,采用最优化的编写方式,不要忽视细节,不要忽视潜在的问题。

应用阶段

当对象的创建阶段结束之后,该对象通常就会进入对象的应用阶段。这个阶 段是对象得以表现自身能力的阶段。也就是说对象的应用阶段是对象整个生命周 期中证明自身“存在价值”的时期。在对象的应用阶段,对象具备下列特征:

◆系统至少维护着对象的一个强引用(Strong Reference);

◆所有对该对象的引用全部是强引用(除非我们显式地使用了:软引用 (Soft Reference)、弱引用(Weak Reference)或虚引用(Phantom Reference))。

上面提到了几种不同的引用类型。可能一些读者对这几种引用的概念还不是 很清楚,下面分别对之加以介绍。在讲解这几种不同类型的引用之前,我们必须 先了解一下Java中对象引用的结构层次。

Java对象引用的结构层次示意如图2-6所示。

图2-6  对象引用的结构层次示意

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

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

由图2-6我们不难看出,上面所提到的几种引用的层次关系,其中强引用处于 顶端,而虚引用则处于底端。下面分别予以介绍。

1.强引用

强引用(Strong Reference)是指JVM内存管理器从根引用集合(Root Set) 出发遍寻堆中所有到达对象的路径。当到达某对象的任意路径都不含有引用对象 时,对这个对象的引用就被称为强引用。

2.软引用

软引用(Soft Reference)的主要特点是具有较强的引用功能。只有当内存 不够的时候,才回收这类内存,因此在内存足够的时候,它们通常不被回收。另 外,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。 它可以用于实现一些常用资源的缓存,实现Cache的功能,保证最大限度的使用 内存而不引起OutOfMemory。再者,软可到达对象的所有软引用都要保证在虚拟 机抛出OutOfMemoryError

之前已经被清除。否则,清除软引用的时间或者清除不同对象的一组此类引 用的顺序将不受任何约束。然而,虚拟机实现不鼓励清除最近访问或使用过的软 引用。下面是软引用的实现代码:

… … import java.lang.ref.SoftReference; … A a = new A(); … // 使用 a … // 使用完了a,将它设置为soft 引用类型,并且释放强引用; SoftReference sr = new SoftReference(a); a = null; … // 下次使用时  if (sr!=null) {     a = sr.get(); } else{     // GC由于内存资源不足,可能系统已回收了a的软引用,     // 因此需要重新装载。     a = new A();     sr=new SoftReference(a); } … …

软引用技术的引进,使Java应用可以更好地管理内存,稳定系统,防止系统 内存溢出,避免系统崩溃(crash)。因此在处理一些占用内存较大而且声明周 期较长,但使用并不频繁的对象时应尽量应用该技术。正像上面的代码一样,我 们可以在对象被回收之后重新创建(这里是指那些没有保留运行过程中状态的对 象),提高应用对内存的使用效率,提高系统稳定性。但事物总是带有两面性的 ,有利亦有弊。在某些时候对软引用的使用会降低应用的运行效率与性能,例如 :应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程 中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦,有些时 候我们要权衡利弊择时应用。

3.弱引用

弱引用(Weak Reference)对象与Soft引用对象的最大不同就在于:GC在进 行回收时,需要通过

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号