强引用 软引用 弱引用 虚引用

jason-2卫星介绍及其数据下载 两台仪器发射脉冲宽度均为105.6μs,带宽320MHz(C频段)和320/100MHz(Ku频段),脉冲重复频率1800Hz(Ku频段)和300Hz(C频段),功率78W,数据传输速率22.5kbit/s。共发射了3颗卫星(Jason - 1/2/3),星上有效载荷均主要为雷达高度计和微波辐射计。Jason - 1卫星主要有效载荷为波塞冬 - 2和“贾森微波辐射计”,Jason - 2卫星进行了改进,主要携带了波塞冬 - 3和先进微波辐射计,此外,Jason - 2卫星还携带了“多里斯”系统。 阅读详情

在 JDK 1.2 版本之前,Java中的引用是很传统的定义:如果reference类型的数据中存储的数值代表的是另一块内存的起始地址,就称该reference数据是代表某块内存、某个对象的引用。这种定义并没有什么不对,知识现在看来有些过于狭隘了,一个对象在这种定义下只有“被引用”或者“未被引用”两种状态,对于描述一些“食之无味,弃之可惜”的对象就显得无能为力。譬如我们希望能描述一类对象:当内存空间还足够时,能保留在内存中,如果内存空间在进行垃圾收集后仍然非常紧张,那就可以抛弃这些对象----很多系统的缓存功能都符合这样的应用场景。

在JDK 1.2 版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,这4种引用强度依次逐渐减弱。

强引用 - StrongReference

在 Java 中强引用是一种最常见的对象引用,把对象赋值给一个引用变量,那么这个变量就是一个强引用。例如使用关键字 new 创建的对象就是强引用,强引用是绝对不会被垃圾收集器回收的,当 JVM 内存空间不足时,JVM 即使抛出 OutOfMemoryError 错误也不会对强引用进行垃圾回收释放内存空间的。

String str = "abc";

软引用 - SoftReference

软引用是用来描述一些还有用,但非必须得对象,只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK1.2版之后提供了SoftReference类来实现软引用。
例如Springboot 中加载文件时的缓存:

SoftReference<Object> softRef = new SoftReference<>(obj);

弱引用 - WeakReference

弱引用也是用来描述哪些非必须对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生为止。当垃圾收集器开始工作,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK1.2版之后提供了WeakReference类来实现弱引用。
例如:java.util.WeakHashMap

WeakReference<Object> weakRef = new WeakReference<>(obj)

虚引用 - PhantomReference

虚引用也称为“幽灵引用”或者“幻影引用”,她是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例。为一个对象设置虚引用关联的唯一目的只是为了能在这个对象被收集器回收时收到一个系统通知。在JDK1.2版之后提供了PhantomReference类来实现虚引用。
虚引用的主要作用是跟踪对象被垃圾回收的状态。

PhantomReference<Object> phantomRef = new PhantomReference<>(obj, referenceQueue);

引用强度

强引用 > 软引用 > 弱引用 > 虚引用

扩展

使用软引用实现JVM高速缓存

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

public class SoftReferenceCache<K, V> {

    private final Map<K, SoftReference<V>> cache = new HashMap<>();

    public void put(K key, V value) {
        SoftReference<V> softReference = new SoftReference<>(value);
        cache.put(key, softReference);
    }

    public V get(K key) {
        SoftReference<V> softReference = cache.get(key);
        if (softReference != null) {
            return softReference.get();
        } else {
            return null;
        }
    }

    public void clear() {
        cache.clear();
    }

}
DA14531之如何Debug(在线调试、Jlink仿真、串口打印) 在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。 阅读详情

相关推荐

实验六 存储器实验

只读存储器(ROM)是一种在正常工作时其存储的数据固定不变,其中的数据只能读出,不能写入,即使断电也能够保留数据,要想在只读存储器中存入或改变数据,必须具备特定的条件。当地址为00000101时,会分别在数据位宽为8,16,32的只读寄存器中找到地址为00000101所对应的十进制地址位置,也就是地址为5的数据,并将其分别以8位,16位,32位输出。因此,输出保持为0。因此,当异步清零信号为1时,无论其他输入信号是什么,触发器的输出都会被强制清零,输出为0。1)寄存器输入0011,使能端1,异步清零0。

wenmou1111的博客 3003

Java的四种引用

在JDK1.2之后,Java对引用的概念进行了扩充,将引用分为强引用,软引用、弱引用、虚引用。这四种引用的强度依次减弱。 强引用:指程序代码中普遍存在的,类似“Object obj = new Object();”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。 软引用:用来描述一些还有用但并非必需的对象,对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对...

qq_32100465的博客 247

6.4 构网型储能的需求与配置

摘要: 构网型储能是新型电力系统的关键支撑技术,通过提供电压/频率形成、惯性和稳定控制能力,解决同步机退出导致的系统稳定性问题。其配置需遵循三大原则:1)容量配置以支撑需求为主导,兼顾能量服务;2)优先布局于电网薄弱点、稳定问题突出区域;3)采用自适应控制策略实现全工况优化。核心应用场景包括新能源送出通道稳定、负荷中心调频、黑启动电源等。规划方法需结合系统分析、量化指标和成本效益评估,实现技术经济最优。未来需重点关注构网/跟网混合系统的临界容量占比及自适应控制技术发展。

技术工作者 1140

强引用、弱引用、软引用、虚引用分别是什么?

强引用 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制会受到,即使该...

zhelong19830726的博客 310

cesium 淹没分析

cesium淹没分析

God's asylum的博客 481

STM32_HAL库—PWM产生指定个数

(一)CubeMX设置: 1. 晶振配置(72M) 2. 引脚配置 3. 中断配置 4. 配置及实现方式 由上推出公式: 机器周期: (72MHz / 36) = 2MHz = 0.5us PWM周期: 0.5 * 100 = 50us = 20kHz 5. 主函数调用PWM函数 HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_2); //此处一句后可直接进入中断 6. PWM溢出回调函数 void HAL_TIM_PWM_PulseFinished

5526

JAVA基础 - 强引用、弱引用、软引用、虚引用

强引用:不会被回收; 软应用:内存不足时回收 弱引用:正常垃圾回收 虚引用:跟踪对象的正常垃圾回收 ...

zs1972551648的博客 1万+

Mamba-YOLOv8深度解析:基于状态空间模型的下一代目标检测架构(含完整代码与实战部署)文末含资料链接!

通过本文的完整指南,您将掌握从理论创新到工程落地的全流程技术细节。立即动手实践,开启目标检测的新纪元!

FJN110的博客 519

强引用、软引用、弱引用、虚引用

如果不停的创建对象,总有一个时刻会占满内存空间,为了避免这种现象的发生,jvm会主动的将未使用的内存空间进行回收(GC)。java中基本数据类型分为两大类:1、基本数据类型;2、引用数据类型。JDK1.2中又将引用数据类型分为4类: 强引用、软引用、弱引用、虚引用,引入的目的是为了更好的管理内存空间。其中,FinalReference 被设计出来的目的是给 JVM 用的,这里暂时不学习。下面从强到弱学习四种引用类型。

qq_41163858的博客 3528

C++软件异常分析概述

本文将详细讲述Windows系统中软件异常的分类以及常用的排查方法,给大家提供一个借鉴与参考。

dvlinker的技术专栏 4万+

三极管电平转换电路

摘要:本文介绍了三种基于三极管的电平转换电路方案。第一种采用双NPN三极管实现3.3V转5V反相电平转换;第二种使用单NPN三极管完成5V转3.3V同相转换;第三种利用单PNP三极管实现3.3V转5V同相转换。各方案均通过三极管的开关特性配合电阻网络实现电压域适配,具有结构简单、成本低的优点,适用于不同逻辑电平设备(如MCU与外设)间的信号兼容传输。文中详细分析了各电路的工作原理、元件作用和特性,并通过Multisim仿真验证了其功能有效性。

XU157303764的博客 1856

强引用、弱引用、软引用和虚引用

前言 Java执行GC判断对象是否存活有两种方式其中一种是引用计数。 引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。 从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 1. 强

傅红雪的专栏 3540

ZYNQ BRAM实现PS与PL数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过BRAM模块,也就是Block RAM实现此要求。本章通过Zynq的GP Master接口读写PL端的BRAM,实现与PL的交互。在本实验中加入了自定义的FPGA程序,并利用AXI4总线进行配置,通知其何时读写BRAM。以下为本实验原理图,CPU通过AXI BRAM Controller读取BRAM数据,CPU仅配置自定义的PL BRAM Controller 的寄存器,不通过它读写数据。

baidu_34971492的博客 2279

强引用、弱引用、软引用、虚引用

Java中4种引用的级别和强度由高到低依次为:强引用 -> 软引用 -> 弱引用 -> 虚引用当垃圾回收器回收时,某些对象会被回收,某些不会被回收。垃圾回收器会从根对象Object来标记存活的对象,然后将某些不可达的对象和一些引用的对象进行回收。引用类型被垃圾回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时终止软引用当内存不足时对象缓存内存不足时终止弱引用正常垃圾回收时对象缓存垃圾回收后终止虚引用正常垃圾回收时跟踪对象的垃圾回收垃圾回收后终止。

m0_74267125的博客 1672

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

强引用,弱引用,软引用,虚引用它们有什么区别?你知道吗?

本文详细解析了Java中的四种引用类型:强引用、软引用、弱引用和虚引用。首先回顾了JVM内存模型,包括栈、堆、方法区等组成部分。然后分别阐述了每种引用类型的特点: 强引用:最常见的引用类型,只要存在强引用,对象就不会被GC回收; 软引用:内存不足时会被回收,适合实现缓存功能; 弱引用:只要发生GC就会被回收,常用于ThreadLocal等场景; 虚引用:无法获取对象,主要用于管理堆外内存,需配合引用队列使用。 文章通过代码示例展示了每种引用的特性,并分析了它们的使用场景和内存管理机制,最后用表格对比总结概括

m0_70325779的博客 4095

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java强引用、软引用、弱引用、虚引用有什么区别?

在 Java 语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象,理解引用对于掌握 Java 对象生命周期和 JVM 内部相关机制非常有帮助。 在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。 强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么? 典型回答 1.强引用 特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用

小朱小朱绝不认输的博客 4196

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java中强引用、软引用、弱引用、虚引用

引用类型被回收时间用途生存时间强引用从来不会对象的一般状态JVM停止运行时软引用内存不足时对象缓存内存不足时弱引用jvm垃圾回收时对象缓存gc运行后虚引用未知未知未知引用类型软引用和弱引用都可以简单实现缓存功能,在实现缓存功能的基础上又能保证缓存对象可以被及时回收。

pig_boss的博客 1665

什么是强引用、软引用、弱引用、虚引用?

什么是强引用、软引用、弱引用、虚引用?强引用(StrongReference):一般指的是对像被new出来,强引用一般不会被jvm收回,但会报OutOfMemory(内存不足)。Obje...

逍遥壮士 3742

强引用,软引用,弱引用,虚引用

与强引用、软引用和弱引用不同,虚引用并不能通过引用来获取对象的实例。如果一个对象只有弱引用,并且没有任何强引用指向它,那么在下一次垃圾回收时,垃圾回收器会将其标记为可回收,并在适当的时候进行回收。如果一个对象只有软引用,并且没有任何强引用指向它,那么在内存不足时,垃圾回收器可能会回收这个对象,以腾出更多的内存空间。如果只有弱引用指向一个对象,并且没有其他强引用指向它,那么在垃圾回收时,即使内存充足,垃圾回收器也可能回收该对象。当一个对象只有弱引用时,垃圾回收器在下一次进行垃圾回收时就可能会回收这个对象。

cang_ling的博客 1362

什么是强引用,软引用,弱引用,虚引用

强引用,软引用,弱引用,虚引用 强引用指的是代码中普遍存在的Object obj=new Object()这类的引用,只要强引用存在,垃圾收集器就不会回收被引用的对象, 软引用,有些有用但是并非必须的对象,在系统将要发生内存溢出之前,会把这些对象列进回收范围内进行二次回收,如果这次回收还是没有足够的内存将会抛出内存溢出异常,java中的softRefence表示软引用 public class ...

qq_41174684的博客 4143

Java中的强引用,软引用,弱引用和虚引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 一、强引用 如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。

始则转俗成真,终乃回真向俗! 7072

Java中的强引用、软引用、弱引用与虚引用

一、前言 今天我们浅谈一下java的四种引用,分别是强引用、软引用、弱引用与序引用。在谈引用之前我们不得不提一下Java的垃圾回收器机制GC,GC算是Java的一大特点,我们都知道c语言是不能自动释放内存的需要程序员去操作的,而Java自带的垃圾回收机制是能够帮助程序员自动释放内存的。 所以在了解四种引用之前我们先了解一下GC GC:是Java自带的垃圾回收器,它是运行在独立的,优先级比较低的线程中,时刻都在检测与释放无用的内存,那是如何判断它是否有用,主要用的较多的判断方式就是引用计数。 JDK1

qq_48241564的博客 1746

强引用、软引用、弱引用、虚引用分别是什么?

整体架构 强引用(默认支持模式) 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是最常见的普通对象引用,只要还有前饮用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰到这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾机制回收的,即使该对象以后永远都不能被用到,JVM也不会回收。因此强引用是造成Java内存泄露的主要原因之一。

沈光阳的博客 1023
上一篇: static
下一篇: Linux 安装配置 ZooKeeper 集群
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值