Java中的强引用,软引用,弱引用,虚引用有什么用?

https://www.zhihu.com/question/37401125/answer/100981172

1、

强引用是使用最普遍的引用:Object o=new Object(); 特点:不会被GC
  • 将对象的引用显示地置为null:o=null; // 帮助垃圾收集器回收此对象
  • 举例ArrayList的实现源代码:

 
2、
软引用用来描述一些还有用但是并非必须的对象,在Java中用java.lang.ref.SoftReference类来表示。
对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。

 

 

3、

弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
 
Weak Reference标记
 
 ThreadLocal中的ThreadLocalMap其实就是Entry就是弱引用,防止线程结束后,ThreadLocal还有引用指向Entry,导致内存泄漏问题

4、虚引用也称为幻影引用:一个对象是都有虚引用的存在都不会对生存时间都构成影响,也无法通过虚引用来获取对一个对象的真实引用。
唯一的用处:能在对象被GC时收到系统通知,JAVA中用PhantomReference来实现虚引用。管理直接内存,虚拟机内部引用指向直接内存的资源

虚引用:网络加载外部资源时,使用虚引用关联外部资源
 
不同
 

 

 

posted on   潮流教父孙笑川  阅读(148)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示