第227天学习打卡(知识点回顾 弱引用 虚引用)

本文探讨了Java中软引用和虚引用的概念,如何利用它们在处理大量图片场景中避免内存溢出,并解释了虚引用与ReferenceQueue的协作机制。重点介绍了如何使用WeakReference和PhantomReference来管理对象生命周期。
摘要由CSDN通过智能技术生成

知识点回顾

弱引用

虚引用需要用java.lang.ref.WeakReference类来实现,它比软引用的生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,都会回收该对象占用的内存。

假如有一个应用需要读取大量的本地图片:

如果每次读取图片都从硬盘读取则会严重影响性能,如果一次性全部加载到内存可能造成内存溢出。

此时使用软引用可以解决这个问题:

设计思路:用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效的避免OOM问题。

Map<String, SoftReference<BitMap>>imageCache = new HashMap<String, SoftReference<BitMap>>();

虚引用

虚引用需要java,lang,ref.PhantomReference类来实现。

虚引用和其他几种引用都不同,虚引用并不会决定对象的声明周期。

如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都能被垃圾回收器回收,它不能单独使用也不能通过它访问对象,虚引用必须和引用队列(ReferenceQueue)联合使用。

虚引用的主要作用是跟踪对象被垃圾回收的状态。仅仅提供了一种确保对象被finalize以后,做某些事情的机制。

PhantomReference的get方法总是返回null,因此无法访问对应的引用对象。其意义在于说明一个对象已经进入finalization阶段,可以被gc回收,用来实现比finalization机制更灵活的回收操作。

设置虚引用关联的唯一目的,就是在这个对象被收集器回收的时候收到一个系统通知或者后续添加进一步的处理。

java技术允许使用finalize()方法在垃圾收集器将对象从内存中清理出去之前做必要的清理工作。

总结:

java提供了四种引用类型,在垃圾回收的时候,都有各自的特点。

ReferenceQueue是用来配合引用工作的,没有ReferenceQueue一样可以运行。

创建引用的时候可以指定关联的队列,当GC释放对象内存的时候,会将引用加入到引用队列,如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内被回收之前采取必要的行动,这相当于是一种通知机制。

B站:尚硅谷Java大厂面试题第二季(java面试必学,周阳主讲)_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值