强引用、软引用、弱引用、虚引用有什么区别?

不同的引用类型,主要体现的是对象不同的可达性状态和对垃圾收集的影响。

强引用

强引用,就是普通对象的引用,只要还有强引用指向一个对象,就能表示对象还"活着", 垃圾收集器无法回收这一类对象。只有在没有其他引用关系,或者超过了引用的作用域,再或者显示的把引用赋值为null的时候,垃圾回收器才能进行内存回收。

软引用

软引用,是一种相对强引用弱化一些的引用,可以让对象豁免一些垃圾收集,只有当 JVM 认为内存不足时,才会去试图回收软引用指向的对象。软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

弱引用

弱引用,相对强引用而言,它允许在存在引用关联的情况下被垃圾回收的对象在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用 的对象,不管当前 内存空间足够与否, 垃圾回收期都会 回收 该内存

虚引用

虚引用,它不会决定对象的生命周期,它提供了一种确保对象被 finalize 以后,去做某些事情的机制。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。程序可以通过判断引用队列 中是否已经加入了 虚引用
来了解被引用的对象是否将要进行 垃圾回收 ,然后我们就可以在引用的对象的内存回收之前采取必要的行动

相关推荐
侠客行031716 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪16 小时前
深入浅出LangChain4J
java·langchain·llm
灰子学技术17 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚17 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
风流倜傥唐伯虎18 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰18 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码18 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚18 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂18 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas13618 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript