下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、i 分钟理解java中的弱引用-编程开发技术十分钟理解java中的弱引用原文出处:absfree (简卩作者)本篇文章尝试从what. why、how这三个角度來探索jawai中的弱引用,帮助大家 理解jqvq中弱引用的定义、基木使用场景和使用方法。由于个人水平有限,叙 述屮难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:)1. what什么是弱引用?java中的弱引用具体指的是java. lang. ref. weakreference<t>类,我们首先來 看一下官方文档对它做的说明:弱引用对彖的存在不会阻止它所指向的对彖被垃圾回收器回收。弱 引用最常见的用途是实现规
2、范映射(canonicalizing mappings,比 如哈希表)。假设垃圾收集器在某个时间点决定一个对象是弱可达的(weakly reachable)(也就是说当前指向它的全都是弱引用),这时垃圾收 集器会清除所冇指向该对彖的弱引用,然后把这个弱可达对彖标记 为可终结(finalizable)的,这样它随后就会被冋收。与此同时或 稍后,垃圾收集器会把那些刚清除的弱引用放入创建弱引用对象吋 所指定的引用队列(reference queue)中。实际上,java 11存在四种引用,它们由强到弱依次是:强引用、软引用、弱引 用、虚引用。下面我们简单介绍下除弱引用外的其他三种引用: 强引用(st
3、rong reference):通常我们通过new来创建一个新对象时返i叫的引用就是 一个强引用,若一个对象通过一系列强引用可到达,它就是强可达的(strongly reachable),那么它就不被回收 软引用(soft reference):软引用和弱引用的区别在于,若一个对象是弱引用可达, 无论当前内存是否充足它都会被冋收,而软引用可达的对象在内存不充足吋才会被 回收,因此软引用要比弱引用“强''一些虚引用(phantom reference):虚引用是java中授弱的引用,那么它弱到什么程度 呢?它是如此脆弱以至于我们通过虚引用其至无法获取到被引用的对象,虚引用存 在的
4、唯一作用就是当它指向的对象被回收后,虚引用本身会被加入到引用队列中, 用作记录它指向的对象已被回收。考虑卜面的场景:现在有一个product类代表一种产品,这个类被设计为不可扩 展的,而此时我们想要为每个产品增加一个编号。一种解决方案是使用 hashmap<product, integer。于是问题来了,如果我们已经不再需要一个 product对象存在于内存屮(比如已经卖出了这件产品),假设指向它的引用为 producta,我们这时会给producta赋值为nul 1,然而这时producta过去指向 的product对象并不会被回收,因为它显然还被llashmap引用着。所以这种情况
5、下,我们想要真正的回收一个product对象,仅仅把它的强引用赋值为null是 不够的,还要把相应的条目从hashmap中移除。显然“从hashmap中移除不再需 要的条口”这个工作我们不想自己完成,我们希望告诉垃圾收集器:在只有 hashmap中的key在引用着product对象的情况下,就口j以回收相应product对 象了。显然,根据前面弱引用的定义,使用弱引用能帮助我们达成这个目的。我 们只需耍用一个指向product对彖的弱引用对象来作为hashmap屮的key就可以 tohow如何使用弱引用?拿上面介绍的场景举例,我们使用一个指向product对象的弱引用对象來作为 hashmap
6、的key,只需这样定义这个弱引用对象:product producta = new product();weakreferenceproduct> weakproducta 二 new weakreference>(producta);现在,若引用对象weakproducta就指向了 product对象productao那么我们怎 么通过weakproduct获取它所指向的product对彖producta呢?很简单,只需 要下面这句代码:product product = weakproducta. get();实际上,对于这种情况,java类库为我们提供了 weakhashma
7、p类,使用和这个 类,它的键自然就是弱引用对象,无需我们再手动包装原始对象。这样一来,当 producta变为null时(表明它所引用的product已经无需存在于内存中),这 时指向这个product对彖的就是由弱引用对彖weakproducta 了,那么显然这时 候相应的product对象时弱可达的,所以指向它的弱引用会被清除,这个product 对象随即会被回收,指向它的弱引用对象会进入引用队列屮。引用队列下而我们来简单地介绍下引用队列的概念。实际上,weakreference类冇两个构 造函数:创建一个指向给定对象的弱引用weakreference(t referent)创建一个指向给定对象并且登记到给定引用队列的弱引用weakreference (t referent, referencequeue<? super t> q) 我们可以看到第二个构造方法中提供了一个referencequeue类型的参数,通过 提供这个参数,我们便把创建的弱引用对象注册到了一个引用队列上,这样当它 被垃圾冋收器清
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 17672-2025岩石中铅、锶、钕同位素测量方法
- 2025音乐发行的合同书
- 分离与精制的一般方法
- 2025版胆囊结石常见症状及护理守则
- 高考散文阅读方法技巧
- 常见引流管的护理教学课件
- 护士老年糖尿病的护理
- 传染病的健康宣教
- 物业员工行为准则
- 装配电工技能测试题及答案2025
- 重庆法检法律基础知识试题及答案
- 技能大赛集训管理办法
- 彩色多普勒超声眼部应用
- 生产流程标准化管理
- 交通运输行政执法知识试卷及答案解析
- msa测量系统分析考试试题及答案
- 公益岗面试题及答案
- 儿童舞台妆课件
- 高二语文公开课课件(统编版选必中册)古诗词诵读《燕歌行并序》
- 2025年证券专项《证券投资顾问》超高频考点
- 超市各部门员工岗位职责
评论
0/150
提交评论