一文秒懂强引用,软引用、弱引用、虚引用!
创作时间:
作者:
@小白创作中心
一文秒懂强引用,软引用、弱引用、虚引用!
引用
CSDN
1.
https://blog.csdn.net/qq_56158663/article/details/146160391
在Java中,对象的引用类型不仅仅是简单的指针,它们还决定了对象的生命周期和垃圾回收的时机。本文将深入讲解四种引用类型:强引用、软引用、弱引用和虚引用,帮助你更好地理解Java的内存管理和垃圾回收机制。
一、 强引用 💪
意义:你
new
出来的对象,只要有变量指向它,它就死不了。 💀 GC 绝对不会回收它。
特点:
- 最常见的引用类型。
- 只要有强引用指向一个对象,该对象就不会被垃圾回收器回收。
- 即使内存不足,JVM 宁愿抛出
OutOfMemoryError
(OOM) 💥 异常,也不会回收强引用指向的对象。
代码示例:
public class StrongReferenceExample {
public static void main(String[] args) {
// 创建一个对象,并用强引用指向它
Object obj = new Object();
Object strongRef = obj;
// 此时,obj和strongRef都指向同一个对象
System.out.println(obj);
System.out.println(strongRef);
// 将obj置为null,但strongRef仍然指向该对象
obj = null;
System.gc(); // 建议JVM进行垃圾回收,但不保证立即执行
// 即使obj为null,strongRef指向的对象仍然存在,不会被回收
System.out.println(strongRef); // 仍然能打印出对象
// 只有当strongRef也置为null时,该对象才有可能被回收
strongRef = null;
System.gc();
}
}
解释:
Object obj = new Object();
创建了一个新的
Object
对象,并用强引用
obj
指向它。
Object strongRef = obj;
又创建了一个强引用
strongRef
,也指向同一个对象。
- 即使
obj = null;
,
strongRef
仍然指向该对象,所以该对象不会被回收。 - 只有当
strongRef = null;
,并且 GC 执行时,该对象才有可能被回收。
二、 软引用 ☁️
意义:对象还有用,但也不是非要不可。 🤷 内存够用的时候,留着它;内存不够用的时候,就回收它。
特点:
- 比强引用弱一些的引用类型。
- 只有当 JVM 认为内存不足时,才会回收软引用指向的对象。
- 通常用于实现缓存。 📦
代码示例:
import java.lang.ref.SoftReference;
public class SoftReferenceExample {
public static void main(String[] args) {
// 创建一个对象
Object obj = new Object();
// 创建一个软引用指向该对象
SoftReference<Object> softRef = new SoftReference<>(obj);
// 将obj置为null,断开强引用
obj = null;
// 从软引用中获取对象
Object retrievedObj = softRef.get();
System.out.println("Before GC: " + retrievedObj);
// 尝试进行垃圾回收
System.gc();
// 再次从软引用中获取对象
retrievedObj = softRef.get();
System.out.println("After GC: " + retrievedObj);
// 模拟内存不足的情况
try {
byte[] b = new byte[1024 * 1024 * 700]; // 700MB
} catch (OutOfMemoryError e) {
System.out.println("OOM occurred");
}
// 再次尝试获取对象
retrievedObj = softRef.get();
System.out.println("After OOM: " + retrievedObj);
}
}
解释:
SoftReference
热门推荐
探索成都旅游自由行:美食、景点与文化的完美融合
现在音乐为什么还要用十二平均律呢?
第一次攀登珠穆朗玛峰:挑战极限的壮丽征程
哪些专利最难申请?
援非水稻专家杨华德:感动世界的“中国心” 装着非洲兄弟的“水稻梦”
跑步前最好的热身动作
五种对牙齿有益的食物,建议常吃以强健牙齿
春分养生需要注意的六大原则 春分时节养生的宜和忌
春分的风俗活动和寓意介绍
减脂期间蛋白质摄入量,减脂期间蛋白质摄入量是多少
如何办理村里户口?这些办理流程对户籍管理有何影响?
星际探索技术的前沿研究与挑战
大学生挫折应对与压力管理
团队沟通的障碍如何克服
10个心理咨询契机,助你走出生活困境!
防晒霜选购指南:SPF和PA值真相!
什么是电池容量调整
解锁 Windows 11 管理员权限设置的奥秘
论工艺参数对激光焊接质量的影响
孩子发烧时为何不会出汗
银行白银投资的短期投资策略分析
减肥中午吃去皮鸡腿
手工揉面技巧大揭秘:轻松揉出完美面包面团
道指解析:成分股、选股逻辑、历史表现与做空道指ETF的工具
道指重大调整:英伟达将替代英特尔成为成分股!
背后的淞沪会战:京沪杭国防工事与驻军,这场大战身后的影响
福州赏花攻略:热门赏花地推荐及花期指南
茶文化与奶茶文化:从历史传承到现代发展
企业落地大模型的“五步法”
探索喝茶对心脑血管健康的益处