Java强引用、软引用、弱引用、虚引用的区别是什么

我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用;软引用通过SoftReference类实现。 软引用的生命周期比强引用短一些;弱引用通过WeakReference类实现。 弱引用的生命周期比软引用短。

一、强引用

特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,具体回收时机还是要看垃圾收集策略。

应用场景:项目中到处都是。

二、软引用

特点:软引用通过SoftReference类实现。 软引用的生命周期比强引用短一些。只有当 JVM 认为内存不足时,才会去试图回收软引用指向的对象:即JVM 会确保在抛出 OutOfMemoryError 之前,清理软引用指向的对象。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。后续,我们可以调用ReferenceQueue的poll()方法来检查是否有它所关心的对象被回收。如果队列为空,将返回一个null,否则该方法返回队列中前面的一个Reference对象。

应用场景:软引用通常用来实现内存敏感的缓存。如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

具体实例:图片缓存框架中,“内存缓存”中的图片是以这种引用来保存,使得JVM在发生OOM之前,可以回收这部分缓存。

三、弱引用

特点:弱引用通过WeakReference类实现。 弱引用的生命周期比软引用短。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。由于垃圾回收器是一个优先级很低的线程,因此不一定会很快回收弱引用的对象。弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。

应用场景:弱应用同样可用于内存敏感的缓存。

具体实例:在静态内部类中,经常会使用虚引用。例如,一个类发送网络请求,承担callback的静态内部类,则常以虚引用的方式来保存外部类(宿主类)的引用,当外部类需要被JVM回收时,不会因为网络请求没有及时回来,导致外部类不能被回收,引起内存泄漏。

四、虚引用

特点:虚引用也叫幻象引用,通过PhantomReference类来实现。无法通过虚引用访问对象的任何属性或函数。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

应用场景:可用来跟踪对象被垃圾回收器回收的活动,当一个虚引用关联的对象被垃圾收集器回收之前会收到一条系统通知。

具体实例:一种引用的get()方法返回总是null,所以,可以想象,在平常的项目开发肯定用的少。

来源:https://blog.csdn.net/weixin_44052055/article/details/120856602

延伸阅读

芯片的用途

芯片(Chip)是一个集成电路的简称,它是电子设备中最基础的组件。电子设备,如电脑、手机、电视等几乎所有的电子设备都会使用到芯片。以下是芯片的一些主要用途:

  1. 数据处理:许多芯片被设计成微处理器,用于执行各种计算和数据处理任务。例如,你的电脑或手机中的中央处理器(CPU)就是一种芯片,它负责处理所有的计算任务。
  2. 存储数据:有些芯片,如闪存芯片,被用于存储数据。这些芯片可以在你的电脑、手机、USB驱动器或其他设备中找到。
  3. 网络通信:一些芯片被设计用于处理网络通信,包括无线和有线通信。例如,手机和电脑中的Wi-Fi芯片就是这样的一种。
  4. 图像处理:图形处理器(GPU)是一种特殊类型的芯片,它专门设计用于处理图像和视频相关的计算任务。GPU在视频游戏、图形设计和近年来的机器学习等领域都有广泛的应用。
  5. 声音处理:声卡中的音频处理器是用于处理音频信号的芯片,负责生成和播放声音。
  6. 控制硬件:许多芯片被用于控制电子设备中的其他硬件。例如,电脑主板上有很多芯片,用于控制内存、硬盘、USB设备等。

这些只是芯片的一些主要用途,事实上,芯片的应用领域非常广泛,几乎所有的电子设备和系统都需要使用到芯片。

文章标题:Java强引用、软引用、弱引用、虚引用的区别是什么,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/53567

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.ZE.Z站长
上一篇 2023年5月31日
下一篇 2023年5月31日

相关推荐

  • 源程序编辑器有哪些

    源程序编辑器有:1、Notepad++(Windows);2、Emacs(所有平台);3、UltraEdit(Windows);4、TextMate(Mac OS X);5、Vim(所有平台)。Notepad++是Windows操作系统下的一套文本编辑器(软件版权许可证: GPL),有完整的中文化接…

    2023年1月15日
    18900
  • 多产品需求如何管理

    要做到:一、建立需求来源和接受渠道;二、记录需求变化;三、审查要求并达成共识;四、达成项目共识;五、识别项目工作与需求之间的矛盾,并采取纠正措施;六、双向跟踪维护。为避免需求管理的混乱,规定谁接受需求,哪些人可以提出需求。 一、建立需求来源和接受渠道 需求收集,包括被动和主动的需求收集,其中主动的需…

    2023年3月22日
    7000
  • LSTM比Tranformer优势在哪里

    LSTM相对于Transformer的几个关键优势:1、长期记忆能力;2、结构简单;3、时序数据处理;4、稳定性和训练。长短时记忆网络 (LSTM) 是为解决长期依赖问题而设计的,可以捕捉并存储长时间跨度的信息。 1、长期记忆能力 LSTM:长短时记忆网络 (LSTM) 是为解决长期依赖问题而设计的…

    2023年7月30日
    28100
  • Linux下mysql读写速度为什么很慢

    原因有:一、文件系统的选择;二、硬盘I/O;三、MySQL配置问题;四、网络问题。Linux系统有多种文件系统可以选择,如ext3、ext4、XFS等等。然而,不同的文件系统对MySQL的读写速度影响很大。 一、文件系统的选择 Linux系统有多种文件系统可以选择,如ext3、ext4、XFS等等。…

    2023年5月31日
    24600
  • c++ 实时消息系统用什么in-process数据库

    可以用以下数据库:一、SQLite;二、RocksDB;三、LMDB;四、Redis。SQLite 是一个轻量级的 in-process 数据库,完全由 C 语言编写。它非常适合嵌入式系统和移动设备。SQLite 的特点是占用资源少,速度快,可靠性高,易于集成和部署。 一、SQLite SQLite…

    2023年5月30日
    7300
  • 工程管理软件哪个好用

    工程管理软件好用的有:1、PingCode;2、Worktile;3、Jira;4、Microsoft Project;5、Mantis BT ;6、禅道项目管理软件;7、ASANA;8、Teambition。其中,PingCode 是一款覆盖研发全生命周期的项目管理系统。 一、PingCode 这…

    2023年5月7日
    10500
  • 视觉伺服和机器视觉以及计算机视觉的区别是什么

    视觉伺服和机器视觉以及计算机视觉的区别是:1、应用领域;2、技术方法;3、研究方向。视觉伺服主要用于实现机器或机器人的动态控制,根据视觉反馈进行实时调整;机器视觉主要用于自动检测、识别和测量目标,通常用于静态场景下的图像处理。 一、视觉伺服(Vision-based Servoing) 视觉伺服是一…

    2023年7月30日
    19800
  • 请问系统软件和软件系统有什么区别

    系统软件和软件系统虽然词汇相近,但代表着截然不同的概念。系统软件是指管理计算机硬件资源、提供程序运行环境的软件,它直接与硬件交互并服务于其他软件。主要包括操作系统(1)、设备驱动程序(2)、系统服务(3)、工具软件(4)。相对的,软件系统指的是为实现特定的需求,由一组协同工作的程序组成的集合,它着重…

    2023年11月13日
    3000
  • 计算机服务流程有哪些

    计算机服务流程有:1、活动管理;2、事件管理;3、请求履行;4、访问管理;5、问题管理。活动管理是指,关于在整个生命周期中管理事件,其中包括检测事件、监视更改状态以及对事件进行排序和分类以确定最佳行动方案。 1、活动管理 顾名思义,它是关于在整个生命周期中管理事件,其中包括检测事件、监视更改状态以及…

    2023年3月5日
    20700
  • 项目控制的定义是什么

    项目控制的定义是项目管理者根据项目跟踪提供的信息,对比原计划(或既定目标),找出偏差,分析成因,研究纠偏对策,实施纠偏措施的全过程。所以项目控制过程是一种特定的,有选择的,能动的动态作用过程。

    2023年1月12日
    19000

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部