weakreference_Java中WeakReference,SoftReference,PhantomReference和Strong Reference之间的区别...

weakreference

很长一段时间以来,WeakReference和SoftReference都已添加到Java API中,但是并不是每个Java程序员都熟悉它。 这意味着在Java中使用WeakReference和SoftReference的位置和方法之间存在差距。 参考类对于“垃圾收集 ” 如何工作尤为重要。 众所周知,垃圾收集器从有资格进行垃圾收集的对象中回收内存,但是很少有程序员知道这种资格是根据指向该对象的引用类型决定的。 这也是Java中WeakReference和SoftReference之间的主要区别 。 如果只有弱引用指向该对象,并且它们被急切地收集,则垃圾收集器可以收集该对象;另一方面,当JVM绝对需要内存时,将收集具有SoftReference的对象。 SoftReference和WeakReference的这些特殊行为使它们在某些情况下很有用,例如SoftReference在实现缓存方面看起来很完美,因此当JVM需要内存时,它会删除只有SoftReference指向它们的对象。 另一方面,WeakReference非常适合存储元数据,例如,存储ClassLoader引用。 如果未加载任何类,则没有必要保留ClassLoader的引用,WeakReference会在删除最后一个强引用后立即使ClassLoader有资格进行垃圾回收。 在本文中,我们将探索有关Java中各种参考的更多信息,例如,强引用和幻影引用。

对于那些不知道的人,Java有四种参考:

  1. 强大的参考
  2. 参考不足
  3. 软参考
  4. 幻影参考

强引用是最简单的,因为我们在日常编程中使用它,例如在代码中,String s =“ abc”,引用变量s具有对String对象“ abc”的强引用。 任何附加了“强引用”的对象都不符合垃圾回收的条件 。 显然,这些是Java程序所需的对象。 弱引用使用java.lang.ref.WeakReference类表示,您可以使用以下代码创建弱引用:

Counter counter = new Counter(); // strong reference - line 1
WeakReference<Counter> weakCounter = new WeakReference<Counter>(counter); //weak reference
counter = null; // now Counter object is eligible for garbage collection

现在,只要您使强引用计数器= null,在第1行创建的计数器对象就可以进行垃圾回收; 因为它没有更多的“强引用”和“弱引用”(由引用变量“ weakCounter”引用)无法阻止对Counter对象进行垃圾回收。 另一方面,如果这是“软引用”,则在JVM绝对需要内存之前,不会垃圾收集Counter对象。 Java中的软引用使用java.lang.ref.SoftReference类表示。 您可以使用以下代码在Java中创建SoftReference。

Counter prime = new Counter();  // prime holds a strong reference - line 2
SoftReference<Counter> soft = new SoftReference<Counter>(prime) ; //soft reference variable has SoftReference to Counter Object created at line 2prime = null;  // now Counter object is eligible for garbage collection but only be collected when JVM absolutely needs memory

在将强引用设为空之后,在第2行上创建的Counter对象仅具有一个软引用,该软引用不能阻止对其进行垃圾回收,但可以延迟收集,这在WeakReference情况下非常渴望。 由于SoftReference和WeakReference之间的主要区别 ,SoftReference更适合于缓存,而WeakReference更适合于存储元数据 。 WeakReference的一个方便示例是WeakHashMap,它是Map接口(例如HashMap或TreeMap )的另一种实现,但具有一个独特的功能。 WeakHashMap将键包装为WeakReference,这意味着一旦删除了对实际对象的强引用,WeakHashMap内部存在的WeakReference便不会阻止它们被垃圾收集。

幻象引用是java.lang.ref包中提供的第三种引用类型。 幻影引用由java.lang.ref.PhantomReference类表示。 只要垃圾收集器喜欢,就可以收集仅具有指向它们的幻影引用的对象。 与WeakReference和SoftReference类似,您可以使用以下代码创建PhantomReference:

DigitalCounter digit = new DigitalCounter(); // digit reference variable has strong reference - line 3
PhantomReference<DigitalCounter> phantom = new PhantomReference<DigitalCounter>(digit); // phantom reference to object created at line 3digit = null;

删除“强引用”后,在第3行创建的DigitalCounter对象可以随时进行垃圾回收,因为它仅具有一个指向它的PhantomReference,这不能阻止它进行GC处理。

除了了解WeakReference,SoftReference,PhantomReference和WeakHashMap之外,还有一个称为ReferenceQueue的类值得一提。 您可以在创建任何WeakReference,SoftReference或PhantomReference时提供ReferenceQueue实例,如以下代码所示:

ReferenceQueue refQueue = new ReferenceQueue(); //reference will be stored in this queue for cleanupDigitalCounter digit = new DigitalCounter();
PhantomReference<DigitalCounter> phantom = new PhantomReference<DigitalCounter>(digit, refQueue);

实例的引用将附加到ReferenceQueue,您可以通过轮询ReferenceQueue来使用它执行任何清理。 该图很好地总结了对象的生命周期。

Java中弱的强软幻影参考

这就是Java中WeakReference和SoftReference之间的区别 。 我们还学习了引用类的基础,例如Java和WeakHashMap和ReferenceQueue中的弱引用,软引用和幻像引用。 仔细使用引用可以帮助进行垃圾回收,并在Java中实现更好的内存管理。

翻译自: https://www.javacodegeeks.com/2014/03/difference-between-weakreference-vs-softreference-vs-phantomreference-vs-strong-reference-in-java.html

weakreference

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网应用:蓝牙模块在智能门锁中的应用

在现如今&#xff0c;智能门锁的使用已经很广泛了&#xff0c;其原因更多的是智能系统的概念正在逐步改变人们的生活。而基于网络蓝牙的智能门锁、WIFI网络方案智能门锁、基于指纹识别的指纹门锁乃至是人脸识别、虹膜识别的门锁成为了更多人的选择。 智能门锁方案的应用场景 …

“攻城狮”手把手教你物联网智能生活-内网穿透技术

“攻城狮”手把手教你物联网智能生活-内网穿透技术 内网穿透技术&#xff0c;即实现外网IP访问内网IP而发展起来的一种计算机技术。在了解内网穿透技术之前&#xff0c;我们需要先了解IP和内网外网的概念。 IP&#xff08;InternetProtocol&#xff09;是指的 “网络之间互连…

光模块常见故障与使用注意事项详解

光模块未正确安装常见故障有哪些&#xff1f;怎样才是正确的安装方法以及光模块注意事项有哪些&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 光模块常见故障 1、光模块端口被污染&#xff0c;会造成光模块无法正常使用。光模块端口有异物堵塞&a…

怎样辨别光模块的真假?

光模块(optical module)由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括发射和接收两部分。简单的说&#xff0c;光模块的作用就是光电转换&#xff0c;发送端把电信号转换成光信号&#xff0c;通过光纤传送后&#xff0c;接收端再把光信号转换成电信号。那么…

云智能遥控开关设备再物联网领域的应用:智能养殖高效、生态、安全!

随着我国水土流失日益严重&#xff0c;土地资源严重紧缺&#xff0c;水产养殖池塘已经成为一种趋势&#xff0c;但由于现代气候突变现象日益发生&#xff0c;效益下降等问题突出&#xff0c;如何提高养殖产品品质&#xff0c;直接增加了渔民的经济收入&#xff0c;实现高效、生…

串口光猫设备结构及主要特点介绍

串口光猫是RS-232/422/485串口数据通过光纤媒质传输数据的通信产品&#xff0c;它采用金属外壳&#xff0c;支持工业导轨式安装、壁挂式安装等多种安装方式&#xff0c;同时提供RS-232/422/485接口。那么&#xff0c;串口光猫的设备结构及主要特点有哪些呢&#xff1f;接下来我…

【教程】E103-W10无线串口服务器TCP协议与PC连接收发数据详解!

一、前期准备 打开串口工具&#xff0c;以XCOM V2.6为例&#xff0c;验证AT指令。 如果未识别串口&#xff0c;请按下面的步骤安装相应的驱动。 1.检查并安装串口驱动程序 PC打开“控制面板” &#xff0c;进入“硬件和声音”&#xff0c;选择“设备管理器”。 2.进入“设…

串口光猫应用领域及技术参数详解

串口光猫是RS-232/422/485串口数据通过光纤媒质传输数据的通信产品&#xff0c;它采用金属外壳&#xff0c;支持工业导轨式安装、壁挂式安装等多种安装方式&#xff0c;同时提供RS-232/422/485接口。那么&#xff0c;串口光猫应用领域及技术参数有哪些呢&#xff1f;接下来我们…

【案例】无线串口模块 星型网络组网 案例

星型网络技术 01 什么是星型网络 星型网络是有两种网络设备构成&#xff1a;中心节点和终端节点。中心节点是整个星型网络的枢纽&#xff0c;所有终端节点通过无线或者有线的形式连接到中心节点&#xff0c;与中心节点进行信息交互。终端节点之间不能直接进行信息交互&#xf…

工业级光纤收发器的芯片介绍

工业级光纤收发器的芯片是整个设备的核心&#xff0c;它和一些硬件设备决定了工业级光纤收发器的性能、寿命等是否满足要求。那么&#xff0c;对于光电介质转换芯片的性能具体有哪些呢&#xff1f;下面飞畅科技就给大家详细讲解一下&#xff0c;希望大家对工业级光纤收发器有更…

8口poe交换机产品介绍

八口POE交换机&#xff08;POE31008P&#xff09;提供了从一个网络节点利用5类以太网线的电源和数据的传输。81端口快速以太网端口能用于10/100Mps的连接&#xff0c;其中8个端口可以提供工业标准的IEEE802.3af电源。先进的自感知算法只为标准PD终端设备供电&#xff0c;因而不…

8口PoE网口供电交换机适用环境介绍

8口POE供电网络交换机 “永不烧设备”智能POE交换机&#xff0c;先进的自感知算法只为IEEE 802.3af终端设备供电&#xff0c;因而不需要去担心会损坏私有标准的PoE或非PoE设备。智能供电系统&#xff0c;过载保护&#xff0c;打破传统电力线布局限制&#xff0c;支持8口通过5类…

PoE交换机的选择和使用注意事项介绍

PoE交换机不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电 。如果你打算选择或者使用PoE交换机&#xff0c;这些知识点一定要看&#xff0c;可以让你少走弯路、少些麻烦。接下来&#xff0c;杭州飞畅科技的小编来为大家介绍下PoE交换机的选择和使用要点&#…

poe交换机的作用和优点

POE交换机就是支持网线供电的交换机&#xff0c;其不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电 。那么&#xff0c;poe交换机的作用和优点有哪些呢&#xff1f;接下来我们就跟随杭州飞畅的小编一起来看看吧&#xff01; poe交换机的优点: 1、首创250米超网…

POE以太网交换机产品优势介绍

POE (Power Over Ethernet)指的是在现有的以太网Cat.5布线基础架构不作任何改动的情况下&#xff0c;在为一些基于IP的终端&#xff08;如IP电话机、无线局域网接入点AP、网络摄像机等&#xff09;传输数据信号的同时&#xff0c;还能为此类设备提供直流电的技术&#xff0c;就…

利用STM32和可控硅控制220V加热电路

利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式&#xff1a;移相触发和过零触发1、过零触发2、移…

java 数字 下划线_为什么要在Java SE 7的数字中使用下划线-在数字文字中使用下划线...

java 数字 下划线JDK 1.7发行版引入了几个有用的功能&#xff0c;尽管其中大多数都是语法糖&#xff0c;但使用该功能可以大大提高可读性和代码质量。 这样的功能之一是在数字文字中引入下划线 。 从Java 7开始&#xff0c;您可以在Java源代码中向可读性更高的10_000_000_000写…

工业以太网交换机:核心优点解析

工业交换机是专门为了满足灵活多变的工业应用需求而设计的工业设备&#xff0c;它提供一种高性价比工业以太网通讯解决方案。而其组网方式则更重点关注于环路设计&#xff0c;因此环网工业交换机的使用非常流行。其中&#xff0c;环路有单环和多环的区别&#xff0c;同时亦有在…

使用JAXB时

没有多少示例可以说明这一点&#xff0c;但是如何在应用程序中使用JAXB可以在性能&#xff08;和内存使用&#xff09;方面产生巨大差异。 这个例子 在此博客文章中&#xff0c;我将使用一个名为Membership的示例对象&#xff0c;看起来像这样&#xff1a; 我们将使用JAXB将对…

通信电平转换指南

在我们电路设计中&#xff0c;常常会遇到通信电平转换的问题&#xff0c;在应用电平转换的措施之前还需要判断进行电平转换的必要性。 如果你是用的是3.3V器件作为输出&#xff0c;而5V器件作为接收&#xff0c;那么这种低电平输出不会损坏器件&#xff0c;而且大部分3.3V器件输…