JVM中的对象生命周期详解 - 编程入门网
遵从“勿以恶小而为之”的古训,否则我们开发出 来的应用也是低效的应用,有时应用软件中的一个极小的失误,就会大幅度地降 低整个系统的性能。因此,我们在日常的应用开发中,应该认真对待每一行代码 ,采用最优化的编写方式,不要忽视细节,不要忽视潜在的问题。
应用阶段 当对象的创建阶段结束之后,该对象通常就会进入对象的应用阶段。这个阶 段是对象得以表现自身能力的阶段。也就是说对象的应用阶段是对象整个生命周 期中证明自身“存在价值”的时期。在对象的应用阶段,对象具备下列特征: ◆系统至少维护着对象的一个强引用(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。再者,软可到达对象的所有软引用都要保证在虚拟 机抛出 之前已经被清除。否则,清除软引用的时间或者清除不同对象的一组此类引 用的顺序将不受任何约束。然而,虚拟机实现不鼓励清除最近访问或使用过的软 引用。下面是软引用的实现代码:
软引用技术的引进,使Java应用可以更好地管理内存,稳定系统,防止系统 内存溢出,避免系统崩溃(crash)。因此在处理一些占用内存较大而且声明周 期较长,但使用并不频繁的对象时应尽量应用该技术。正像上面的代码一样,我 们可以在对象被回收之后重新创建(这里是指那些没有保留运行过程中状态的对 象),提高应用对内存的使用效率,提高系统稳定性。但事物总是带有两面性的 ,有利亦有弊。在某些时候对软引用的使用会降低应用的运行效率与性能,例如 :应用软引用的对象的初始化过程较为耗时,或者对象的状态在程序的运行过程 中发生了变化,都会给重新创建对象与初始化对象带来不同程度的麻烦,有些时 候我们要权衡利弊择时应用。 3.弱引用 弱引用(Weak Reference)对象与Soft引用对象的最大不同就在于:GC在进 行回收时,需要通过 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |