java的引用类使用指南

java的引用类使用指南

ID:34438989

大小:75.50 KB

页数:9页

时间:2019-03-06

java的引用类使用指南_第1页
java的引用类使用指南_第2页
java的引用类使用指南_第3页
java的引用类使用指南_第4页
java的引用类使用指南_第5页
资源描述:

《java的引用类使用指南》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java的引用类使用(java.lang.ref包)指南Java2平台引入了java.lang.ref包,其中包括的类可以让您引用对象,而不将它们留在内存中。这些类还提供了与垃圾收集器(garbagecollector)之间有限的交互。PeterHaggar在本文中分析了SoftReference、WeakReference和PhantomReference类的功能和行为,并就这些类的使用给出了一些编程风格上的建议。  当在Java2平台中首次引入java.lang.ref包(其中包含SoftReference、WeakReference和PhantomR

2、eference类)时,它的实用性显然被过分夸大了。它包含的类可能是有用的,但这些类具有的某些局限性会使它们显得不是很有吸引力,而且其应用程序也将特别局限于解决一类特定的问题。  垃圾收集概述  引用类的主要功能就是能够引用仍可以被垃圾收集器回收的对象。在引入引用类之前,我们只能使用强引用(strongreference)。举例来说,下面一行代码显示的就是强引用obj:Objectobj=newObject();  obj这个引用将引用堆中存储的一个对象。只要obj引用还存在,垃圾收集器就永远不会释放用来容纳该对象的存储空间。  当obj超出范围或被显式地

3、指定为null时,垃圾收集器就认为没有对这个对象的其它引用,也就可以收集它了。然而您还需要注意一个重要的细节:仅凭对象可以被收集并不意味着垃圾收集器的一次指定运行就能够回收它。由于各种垃圾收集算法有所不同,某些算法会更频繁地分析生存期较短的对象,而不是较老、生存期较长的对象。因此,一个可供收集的对象可能永远也不会被回收。如果程序在垃圾收集器释放对象之前结束,这种情况就可能会出现。因此,概括地说,您永远无法保证可供收集的对象总是会被垃圾收集器收集。这些信息对于您分析引用类是很重要的。由于垃圾收集有着特定的性质,所以引用类实际上可能没有您原来想像的那么有用,尽

4、管如此,它们对于特定问题来说还是很有用的类。软引用(softreference)、弱引用(weakreference)和虚引用(phantomreference)对象提供了三种不同的方式来在不妨碍收集的情况下引用堆对象。每种引用对象都有不同的行为,而且它们与垃圾收集器之间的交互也有所不同。此外,这几个新的引用类都表现出比典型的强引用“更弱”的引用形式。而且,内存中的一个对象可以被多个引用(可以是强引用、软引用、弱引用或虚引用)引用。在进一步往下讨论之前,让我们来看看一些术语:强可及对象(stronglyreachable):可以通过强引用访问的对象。软可及

5、对象(softlyreachable):不是强可及对象,并且能够通过软引用访问的对象。弱可及对象(weaklyreachable):不是强可及对象也不是软可及对象,并且能够通过弱引用访问的对象。虚可及对象(phantomlyreachable):不是强可及对象、软可及对象,也不是弱可及对象,已经结束的,可以通过虚引用访问的对象。清除:将引用对象的referent域设置为null,并将引用类在堆中引用的对象声明为可结束的。  SoftReference类  SoftReference类的一个典型用途就是用于内存敏感的高速缓存。SoftReference的原理

6、是:在保持对对象的引用时保证在JVM报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取决于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量。  WeakReference类  WeakReference类的一个典型用途就是规范化映射(canonicalizedmapping)。另外,对于那些生存期相对较长而且重新创建的开销也不高的对象来说,弱引用也比较有用。关键之处在于,垃圾收集器运行时如果碰到了弱可及对象,将释放WeakReference引用的对象。然而,请注意,垃圾收集器可能要

7、运行多次才能找到并释放弱可及对象。  PhantomReference类  PhantomReference类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行pre-mortem清除操作。PhantomReference必须与ReferenceQueue类一起使用。需要ReferenceQueue是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时,PhantomReference对象就被放在它的ReferenceQueue上。将PhantomReference对象放在ReferenceQueue上也就是一个通知,表明Phanto

8、mReference对象引用的对象已经结束,可供收集了。这使您能够

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。