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

libfacedetection 框架阅读及扩展经验 libfacedetection 框架源码解析与扩展心得1. libfacedetection 框架简介2. 源码解析2.1 facedetectcnn.h2.2 facedetectcnn.cpp2.3 facedetectcnn-model.cpp3. 其他层的扩展--depthwise convolution 前段时间因为工作需要,对libfacedetection框架做了些扩展,在阅读源... 阅读详情

在 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();
    }

}
从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》 DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。......... 阅读详情

相关推荐

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置)

本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。

weixin_30598225的博客 353

Java的四种引用

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

qq_32100465的博客 247

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 750

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

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

zhelong19830726的博客 310

LTspice导入德州仪器SPICE模型的实用指南与常见问题解析

本文详细介绍了如何在LTspice中导入德州仪器的SPICE模型,包括模型文件获取、路径管理、导入步骤及常见问题解析。通过实用指南帮助工程师精确仿真电路性能,提升设计效率,重点涵盖了第三方模型的导入教程和最佳实践。

kk1234的博客 309

Innovus实战:5分钟搞定postRoute阶段冗余hold buffer的自动清理(附PHC识别技巧)

本文分享了在数字IC后端设计中使用Innovus工具,于postRoute阶段自动清理冗余hold buffer的实战技巧。通过配置时序感知的面积回收模式,可在5分钟内安全移除非关键路径上的PHC缓冲器,有效优化芯片面积与功耗,并附有PHC识别与验证方法。

moon9的博客 400

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

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

zs1972551648的博客 1万+

从选卡到验证:CST仿真GPU加速全流程实战指南

本文详细介绍了CST仿真中GPU加速的全流程实战指南,从硬件选型到软件配置,再到性能验证和常见问题排查。通过对比专业卡与游戏卡的性能差异,提供硬件选型建议,并分享驱动安装、关键设置及CST软件配置的黄金法则,帮助用户显著提升仿真效率。

weixin_30650039的博客 394

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

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

qq_41163858的博客 3528

zds1104示波器使用指南

(2)将探头连接到探头补偿端,按下auto setup按键,一键捕获。(3)连接需要测量信号,开始查看波形。操作说明书,可以自行查看操作说明书。

m0_61973119的博客 6773

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

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

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

傅红雪的专栏 3540

3D深度饼图的QT实现

首先,我们需要创建一个QT项目并创建一个窗口,用于显示我们的饼图。在QT Creator中,选择创建一个新的QT Widgets应用程序项目,并创建一个新的窗口类。在本文中,我将介绍如何使用QT实现一个3D深度饼图(Pie 3D)的可视化效果。在构造函数中,我们将创建一个饼图(QChartView)并设置饼图的数据。这是一个简单的示例,您可以根据需要自定义和扩展代码来创建更复杂的饼图。现在,我们已经完成了3D深度饼图的QT实现。您将看到一个具有相应数据的3D深度饼图显示在窗口中。3D深度饼图的QT实现。

CodeJolt的博客 277

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

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

m0_74267125的博客 1672

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

m0_70325779的博客 4095

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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、付费专栏及课程。

余额充值