🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了强引用、软引用、弱引用、虚引用——垃圾收集相关概念4🌈⭕🔥
【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】
🌈章节引出:
前一篇章:《剑指JVM》——第15章——安全点与安全区域——垃圾收集相关概念4-CSDN博客
🌈章节速览:
15.5 四种引用
所谓的引用就是记录一个对象的地址【指针】,然后通过这个地址值找到这个对象并使用这个对象。最初Java只有强引用,例如“User user=new User("EthanYankang","666")”,user 变量记录了一个User 对象的地址,之后程序便可以通过user 这个变量访问对象的属性值"EthanYankang"和"666",或者通过 user 这个变量调用对象的方法。Java中8种基本数据类型以外的变量都称为引用数据类型的变量,上面的 user 就是对象的引用,也称为对象名。
在JDK1.2版之后,Java对引用的概念进行了细分,将引用分为强引用、软引用、弱引用和虚引用,这四种引用强度依次递减。除强引用外,其他三种引用均需要创建特殊的引用类对象来“构建”引用关系。这些特殊的引用类在java.lang.ref包中,如图15-6所示,它们分别是SoftReference(软引用)、PhantomReference(虚引用)、WeakReference(弱引用),开发人员可以在应用程序中直接使用它们。
1.GC对不同的引用的回收态度
针对不同引用类型的对象,GC的态度也是完全不同的。
(1)强引用(StrongReference):
不回收
是最传统的引用关系,比如前面提到的“User user=newUser("EthanYankang","666")”这种引用关系。只要强引用关系还存在,无论任何情况垃圾收集器都永远不会回收掉被引用的对象。
(2)软引用(SofReference):
内存不足立即回收
在系统将要发生内存溢出之前,垃圾收集器收集完垃圾对象的内存之后,如果内存仍然吃紧,此时垃圾收集器会把软引用的对象列入回收范围之中,进行第二次回收,如果这次回收后还没有足够的内存,才会抛出内存溢出异常。
(3)弱引用(WeakReference):
必回收
被弱引用关联的对象必被垃圾回收器回收。当垃圾收集器工作时,无论内存空间是否足够,都会回收掉被弱引用关联的对象。
(4)虚引用(PhantomReference):
接收系统消息,与生命周期无关
一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获得一个对象的实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
对比:
强引用的对象是不可触及的。相对的,软引用、弱引用和虚引用的对象是软可触及件下,都是可以被回收的。
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏推荐
🌈🌈计算机科学入门系列 关注走一波💕💕
🌈🌈CSAPP深入理解计算机原理 关注走一波💕💕
🌈🌈微服务项目之黑马头条 关注走一波💕💕
🌈🌈redis深度项目之黑马点评 关注走一波💕💕
🌈🌈JAVA面试八股文系列专栏 关注走一波💕💕
🌈🌈JAVA基础试题集精讲 关注走一波💕💕
🌈🌈代码随想录精讲200题 关注走一波💕💕
总栏
🌈🌈JAVA基础要夯牢 关注走一波💕💕
🌈🌈JAVA后端技术栈 关注走一波💕💕
🌈🌈JAVA面试八股文 关注走一波💕💕
🌈🌈JAVA项目(含源码深度剖析) 关注走一波💕💕
🌈🌈计算机四件套 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总 关注走一波💕💕
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!