十分钟理解java中的弱引用-编程开发技术

十分钟理解java中的弱引用-编程开发技术

ID:30945643

大小:68.00 KB

页数:3页

时间:2019-01-04

十分钟理解java中的弱引用-编程开发技术_第1页
十分钟理解java中的弱引用-编程开发技术_第2页
十分钟理解java中的弱引用-编程开发技术_第3页
资源描述:

《十分钟理解java中的弱引用-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、I•分钟理解Java中的弱引用-编程开发技术十分钟理解Java中的弱引用原文出处:absfree(简卩作者)本篇文章尝试从What.Why、How这三个角度來探索Jawai中的弱引用,帮助大家理解Jqvq中弱引用的定义、基木使用场景和使用方法。由于个人水平有限,叙述屮难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:)1.What什么是弱引用?Java中的弱引用具体指的是java.lang.ref.WeakReference类,我们首先來看一下官方文档对它做的说明:弱引用对彖的存在不会阻止它所指向的对彖被垃圾回收器回收

2、。弱引用最常见的用途是实现规范映射(canonicalizingmappings,比如哈希表)。假设垃圾收集器在某个时间点决定一个对象是弱可达的(weaklyreachable)(也就是说当前指向它的全都是弱引用),这时垃圾收集器会清除所冇指向该对彖的弱引用,然后把这个弱可达对彖标记为可终结(finalizable)的,这样它随后就会被冋收。与此同时或稍后,垃圾收集器会把那些刚清除的弱引用放入创建弱引用对象吋所指定的引用队列(ReferenceQueue)中。实际上,Java11存在四种引用,它们由强到弱依次是:强引用、软引用、弱引用

3、、虚引用。下面我们简单介绍下除弱引用外的其他三种引用:•强引用(StrongReference):通常我们通过new来创建一个新对象时返I叫的引用就是一个强引用,若一个对象通过一系列强引用可到达,它就是强可达的(stronglyreachable),那么它就不被回收•软引用(SoftReference):软引用和弱引用的区别在于,若一个对象是弱引用可达,无论当前内存是否充足它都会被冋收,而软引用可达的对象在内存不充足吋才会被回收,因此软引用要比弱引用“强''一些•虚引用(PhantomReference):虚引用是Java中授弱的引用

4、,那么它弱到什么程度呢?它是如此脆弱以至于我们通过虚引用其至无法获取到被引用的对象,虚引用存在的唯一•作用就是当它指向的对象被回收后,虚引用本身会被加入到引用队列中,用作记录它指向的对象已被回收。考虑卜•面的场景:现在有一个Product类代表一种产品,这个类被设计为不可扩展的,而此时我们想要为每个产品增加一个编号。一种解决方案是使用HashMap

5、ctA赋值为nul1,然而这时productA过去指向的Product对象并不会被回收,因为它显然还被llashMap引用着。所以这种情况下,我们想要真正的回收一个Product对象,仅仅把它的强引用赋值为null是不够的,还要把相应的条目从HashMap中移除。显然“从HashMap中移除不再需要的条口”这个工作我们不想自己完成,我们希望告诉垃圾收集器:在只有HashMap中的key在引用着Product对象的情况下,就口J以回收相应Product对象了。显然,根据前面弱引用的定义,使用弱引用能帮助我们达成这个目的。我们只需耍用一个

6、指向Product对彖的弱引用对象来作为HashMap屮的key就可以ToHow如何使用弱引用?拿上面介绍的场景举例,我们使用一个指向Product对象的弱引用对象來作为HashMap的key,只需这样定义这个弱引用对象:ProductproductA=newProduct(・・・);WeakReference〈Product>weakProductA二newWeakReference〈>(productA);现在,若引用对象weakProductA就指向了Product对象productAo那么我们怎么通过weakProduct获取

7、它所指向的Product对彖productA呢?很简单,只需要下面这句代码:Productproduct=weakProductA.get();实际上,对于这种情况,Java类库为我们提供了WeakHashMap类,使用和这个类,它的键自然就是弱引用对象,无需我们再手动包装原始对象。这样一来,当productA变为null时(表明它所引用的Product已经无需存在于内存中),这时指向这个Product对彖的就是由弱引用对彖weakProductA了,那么显然这时候相应的Product对象时弱可达的,所以指向它的弱引用会被清除,这个P

8、roduct对象随即会被回收,指向它的弱引用对象会进入引用队列屮。引用队列下而我们来简单地介绍下引用队列的概念。实际上,WeakReference类冇两个构造函数:〃创建一个指向给定对象的弱引用WeakReference

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

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

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