一文秒懂强引用,软引用、弱引用、虚引用!
创作时间:
作者:
@小白创作中心
一文秒懂强引用,软引用、弱引用、虚引用!
引用
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
热门推荐
血糖值不准?采血难?教你冬天如何正确用血糖仪测血糖!糖友必看!
节日美食:传统节日的特色美食推荐
【超频艺术】:释放Intel处理器全部潜能的终极超频攻略
多肉用什么盆种好 如何挑选合适花盆
秋冬季节肉兔养殖宝典:保暖、营养与疾病预防策略
威海多个海水浴场及周边旅游攻略
郑州SMA沥青玛蹄脂概述
云存储服务的安全性与隐私保护探讨
【负载特性全面解析】:Multisim展示不同负载对三相电路影响的深入研究
如何建立产品失效数据库
闹钟简史:10 分钟重新认识闹钟
考勤打卡积分管理系统规则怎么制定最合理
如何寻找股票的热点题材?这些题材对投资者的决策有何帮助?
读懂米,才会吃
探寻不掉毛、无体味的理想犬种
对比同名作《穷人》,看陀思妥耶夫斯基与托尔斯泰创作风格的异同
羽毛球网距离地面的高度两侧是多少米,羽毛球网的中间高度是多少米
衣柜哥:衣柜的耐用性如何评估?
跟着7位考古专家探楚墓:揭开武王墩墓埋藏千年的秘密
发票使用常见问题及处理方法
仲裁录音证据怎么提供
毕业留恋册制作-定格青春回忆,永恒珍藏校园时光
人均确诊的 ADHD,到底是什么病?
马蹄的热量及营养成分
别只知道松湖烟雨,松山湖好玩的还有这么多……
云喂养"毛孩子" 科技守护流浪猫 | 数字上海十大场景Top20
银行外汇交易的交易风险管理体系
美国留学生忘记报税会有什么影响和解决办法
从“超女”到“天后”:张靓颖的演艺之路有多励志?
从上班通勤到周末休闲,共享单车如何成为你的全能助手?