首页 > 编程语言 >11. Java的四种引用,强弱软虚

11. Java的四种引用,强弱软虚

时间:2024-12-23 22:19:17浏览次数:3  
标签:11 Java String SoftReference 回收 软虚 str new 引用

  • 强引用
    强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:
    String str = new String("str");
  • 软引用
    软引用在程序内存不足时,会被回收,使用方式:
点击查看代码
// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的,
// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T
SoftReference<String> wrf = new SoftReference<String>(new String("str"));
可用场景: 创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。
  • 弱引用
    弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:
    WeakReference<String> wrf = new WeakReference<String>(str);
    可用场景: Java源码中的 java.util.WeakHashMap 中的 key 就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。

  • 虚引用
    虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中。注意哦,其它引用是被JVM回收后才被传入 ReferenceQueue 中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有 ReferenceQueue ,使用例子:
    PhantomReference<String> prf = new PhantomReference<String>(new String("str"), new ReferenceQueue<>());
    可用场景: 对象销毁前的一些操作,比如说资源释放等。 Object.finalize() 虽然也可以做这
    类动作,但是这个方式即不安全又低效

上诉所说的几类引用,都是指对象本身的引用,而不是指Reference的四个子类的引用(SoftReference等)。

标签:11,Java,String,SoftReference,回收,软虚,str,new,引用
From: https://www.cnblogs.com/tim-zuo/p/18625176

相关文章

  • Solution - Luogu P11402 [Code+#8 初赛] 图
    首先通过手玩,发现对于小的\(n\)都有\(m_{\max}\len\),于是直接猜测这个结论并尝试证明。首先对于\(n\le4\)的情况,首先可以直接通过手玩知道\(m_{\max}\len\)。对于\(n>4\)的情况,考虑\(n\)从小到大证明。若\(m>n\),则\(\sum\limits_{i=1}^n\operatorname{de......
  • Memory Leak Detector:Java中内存泄漏的识别与避免_2024-07-23_09-54-10.Tex
    MemoryLeakDetector:Java中内存泄漏的识别与避免Java内存管理基础Java内存模型简介Java内存模型(JavaMemoryModel,JMM)是Java虚拟机(JVM)规范的一部分,它描述了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下如何保证内存的可见性、有序性和原子性。JMM的主要......
  • Solution - Luogu P11394 [JOI Open 2019] ウイルス実験
    首先可以根据字符串\(D\),\(\mathcal{O}(2^c|D|)\)(\(c\)为方向数\(4\))求出上下左右分别是否被感染时对应的最长连续段长度,用于后面的check。考虑到答案要求的最小值,于是可以考虑思考什么样的点不会作为最后的最小值的起始点。考虑到如果最先感染了点\(u\),且最终感染了点\(v......
  • 高级java每日一道面试题-2024年12月23日-并发篇-CAS有什么缺点吗 ?
    如果有遗漏,评论区告诉我进行补充面试官:CAS有什么缺点吗?我回答:CAS(Compare-And-Swap,比较并交换)是一种无锁算法的核心操作,广泛用于实现并发控制。它通过硬件指令直接在内存中进行原子操作,避免了传统锁机制的上下文切换开销。然而,CAS也并非完美,它具有一些缺点和局限性......
  • 高级java每日一道面试题-2024年12月23日-并发篇-多线程有什么用 ?
    如果有遗漏,评论区告诉我进行补充面试官:多线程有什么用?我回答:多线程编程是Java中非常重要的一个概念,它允许程序在同一时间执行多个任务。在现代计算机系统中,多线程技术的应用可以极大地提升应用程序的性能、响应速度以及资源利用率。以下是关于多线程用途的详细解......
  • 学霸带你游戏化解构 Java 面向对象编程核心
    面向对象编程OOP使得代码结构清晰,开发者能够通过对象化的方式组织代码,使得代码逻辑更易理解和扩展。游戏中的每个角色、物品、事件、状态等都可以通过类和对象来管理,减少了代码的重复性,并提高了代码的可维护性。灵活性与扩展性OOP提供了高度的灵活性和扩展性,使得游戏开发......
  • JavaDay1
    JavaDay1注释单行注释://多行注释:/*1231231231123123123123123*/文档注释:/***///注释可以更好地帮我们理解代码/*注释同时也是排除错误的一种手段=*/关键字被Java语言赋予特殊含义的单词一般都是由小写字母组成,IDEA中对关键字有特殊的颜色标识。标......
  • 这份4577页的Java面试PDF,让我成功斩获阿里、字节等大厂offer
      我为大家准备了一份超级全面的Java学习面试笔记,这份电子版笔记涵盖了诸多后端技术栈的面试题和答案,相信可以帮助大家在最短的时间内复习Java后端的大多数技术点和面试题,从而拿到自己心仪的offer。共4577页。整体还是比较清爽的,大家拿到后具体看就知道了。限于文章篇幅......
  • JavaScript从基础到进阶的155个问题
    文章目录1.输出是什么?2.输出是什么?3.输出是什么?4.输出是什么?5.哪一个是正确的?6.输出是什么?7.输出是什么?8.输出是什么?9.输出是什么?10.当我们这么做时,会发生什么?11.输出是什么?12.输出是什么?13.事件传播的三个阶段是什么?14.所有对象都有原型。15.输出是什么?1......
  • JAVA面向对象(一)类的定义
    类是面向对象编程的核心概念之一,它就像是一个模具,定义了一类事物所具有的共同特征和行为。在Java中,我们使用class关键字来定义一个类。例如,让我们创建一个简单的Person类:javapublicclassPerson{//成员变量,描述人的属性privateStringname;privateintage;privateSt......