滚雪球学Java(73):Java中的引用类型: 弱引用、软引用与强引用详解

在这里插入图片描述

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

文章目录

  • 前言
  • 摘要
  • 弱引用、软引用与强引用详解
    • 简介
      • 强引用
      • 软引用
      • 弱引用
    • 源代码解析
      • 强引用
      • 软引用
      • 弱引用
    • 应用场景案例
      • 强引用
      • 软引用
      • 弱引用
    • 优缺点分析
      • 强引用
      • 软引用
      • 弱引用
    • 测试用例
      • 测试代码演示
      • 测试结果
      • 测试代码分析
    • 结论
    • 附录源码
  • ☀️建议/推荐你
  • 📣关于我

前言

  在Java开发中,我们经常会遇到内存泄露、OOM等问题,其中与垃圾回收机制相关的问题也是我们需要注意的。Java中的引用类型分为强引用、软引用和弱引用,理解它们之间的区别和使用场景对于我们优化内存管理、提高程序性能都是非常有益的。本文将详细介绍Java中的三种引用类型的概念、源代码解析、优缺点分析以及应用场景案例,旨在帮助读者深入理解Java中引用类型的使用方法。

摘要

  Java中引用类型包含强引用、软引用和弱引用三种类型,其中强引用是最常用的一种引用类型,其具有最高的优先级;软引用是指向一些有用但非必需的对象,可以在内存不足时回收;弱引用则是一种比软引用更加弱化的引用类型,常用于关联非必须对象的引用。本文将对这三种引用类型进行详细分析。

弱引用、软引用与强引用详解

简介

  Java中引用类型是与内存回收机制相关的重要类型,它们的主要作用是帮助我们管理内存,在程序中对于不再被使用的内存进行回收。Java中引用类型主要包含强引用、软引用和弱引用三种类型。

强引用

  强引用是默认的引用类型,在Java中使用最广泛。如果一个对象具有强引用,那么垃圾回收器就不会回收它,只有当内存不足时才会抛出OOM错误。

MyObject obj = new MyObject();

  上面的代码创建了一个MyObject对象,并将其赋值给一个强引用obj。只要obj存在,MyObject对象就不会被垃圾回收器回收。

软引用

  软引用是指向一些有用但非必需的对象,可以在内存不足时回收。当内存不足时,垃圾回收器会回收被软引用指向的对象。软引用通常用于实现内存敏感的缓存等数据结构。

SoftReference<MyObject>softRef = new SoftReference<MyObject>(new MyObject());

  上面的代码创建了一个MyObject对象,并将其封装在一个软引用中。只有在内存不足时,MyObject对象才会被回收。

  如下是部分源码截图:

在这里插入图片描述

弱引用

  弱引用则是一种比软引用更加弱化的引用类型,常用于关联非必须对象的引用。如果一个对象仅持有弱引用,那么垃圾回收器在运行时,无论内存是否足够,都会回收这个对象。

WeakReference<MyObject>weakRef = new WeakReference<MyObject>(new MyObject());

  上面的代码创建了一个MyObject对象,并将其封装在一个弱引用中。无论内存是否足够,MyObject对象都可能会被垃圾回收器回收。

  如下是部分源码截图:

在这里插入图片描述

源代码解析

强引用

  强引用是Java中默认的引用类型,在Java程序中最为常用。它的原理非常简单,当一个对象具有一个强引用时,垃圾回收器就不会回收它。

MyObject obj = new MyObject();

  上面的代码创建了一个MyObject对象,并将其赋值给一个强引用obj。此时如果obj存在,MyObject对象就不会被垃圾回收器回收。

软引用

  软引用是Java中的一种引用类型,用于指向那些有用但非必需的对象,可以在内存不足时回收。当内存不足时,垃圾回收器会回收被软引用指向的对象。

  软引用常常用于实现内存敏感的缓存等数据结构。下面是一个简单的软引用的示例代码:

SoftReference<MyObject>softRef = new SoftReference<MyObject>(new MyObject());

  上面的代码创建了一个MyObject对象,并将其封装在一个软引用中。只有在内存不足时,MyObject对象才会被回收。

弱引用

  弱引用则是一种比软引用更加弱化的引用类型,常用于关联非必须对象的引用。如果一个对象仅持有弱引用,那么垃圾回收器在运行时,无论内存是否足够,都会回收这个对象。下面是一个简单的弱引用的示例代码:

WeakReference<MyObject>weakRef = new WeakReference<MyObject>(new MyObject());

  上面的代码创建了一个MyObject对象,并将其封装在一个弱引用中。无论内存是否足够,MyObject对象都可能会被垃圾回收器回收。

应用场景案例

强引用

  强引用是默认的引用类型,在Java程序中最为常用。强引用可以用于那些即便被回收也不会造成系统错误的对象,如程序的静态变量或者实例变量。下面是一个使用强引用的示例代码:

public class Cache {private Map<String, MyObject>cache = new HashMap<>();public void put(String key, MyObject value) {cache.put(key, value);}public MyObject get(String key) {return cache.get(key);}
}

  上面的代码创建了一个缓存Cache,使用Map存储键值对,其中MyObject对象使用强引用。

拓展:

  这段代码定义了一个名为Cache的类,它包含一个私有的Map成员变量cache,用于存储字符串和MyObject对象的键值对。它提供了put和get方法,以将对象放入缓存中或从缓存中获取对象。

  put方法使用传入的key和value参数将键值对存储在map中,其中key是一个字符串,value是一个类型为MyObject的对象。

  get方法以key为参数,并返回存储在map中与该key关联的MyObject对象。如果map中不存在该key,则返回null。

  此实现可用于简单的缓存系统,允许开发人员将对象存储在内存中,并在需要时快速检索它们。

软引用

  软引用主要用于实现内存敏感的缓存等数据结构。下面是一个简单的缓存管理器示例代码,其中使用了软引用:

public class CacheManager {private Map<String, SoftReference<MyObject>>cache = new HashMap<>();public void put(String key, MyObject value) {cache.put(key, new SoftReference<>(value));}public MyObject get(String key) {SoftReference<MyObject>softRef = cache.get(key);if (softRef != null) {return softRef.get();}return null;}
}

  上面的代码创建了一个缓存管理器CacheManager,使用Map存储键值对。其中MyObject对象使用软引用,缓存管理器会在内存不足的时候自动清除这些对象。

拓展:

  这是一个缓存管理器类,使用软引用来管理对象缓存,可以避免内存溢出的问题。

  这缓存管理器通过一个 Map 来维护 key-value 对,并使用 SoftReference 来包装 MyObject 对象,使其成为软引用对象。put 方法将一个 key-value 对放入缓存中,使用 SoftReference 包装 value,get 方法则通过 key 获取对应的 SoftReference,并调用 SoftReference 的 get 方法获取 value 对象。如果获取不到 SoftReference 对象,则说明缓存中不存在该 key 对应的对象,返回 null。如果 SoftReference 存在但经过垃圾回收后 value 对象已被回收,则同样返回 null。

  这由于软引用的特性,在内存不足且需要释放内存时,JVM 可以自动回收软引用所包装的对象,从而释放内存。这就避免了强引用所带来的内存泄漏问题,也避免了弱引用所带来的及时回收问题,使得软引用成为一种比较理想的内存管理方式。

弱引用

  弱引用经常用于关联非必须对象的引用。下面是一个简单的代码示例,其中使用了弱引用:

public class Cache {private Map<String, WeakReference<MyObject>>cache = new HashMap<>();public void put(String key, MyObject value) {cache.put(key, new WeakReference<>(value));}public MyObject get(String key) {WeakReference<MyObject>weakRef = cache.get(key);if (weakRef != null) {return weakRef.get();}return null;}
}

  上面的代码创建了一个缓存Cache,使用Map存储键值对。其中MyObject对象使用弱引用,缓存管理器会在内存不足的时候自动清除这些对象。

拓展:

   该代码实现了一个简单的缓存类,使用了HashMap和WeakReference。其中,HashMap用于存储键值对,而WeakReference用于对MyObject对象进行弱引用,避免在内存不足时引起OOM。

   具体来说,当调用put方法时,将传入的key和MyObject对象封装在一个WeakReference中,再将其存入HashMap中。当需要获取某个key对应的对象时,先从HashMap中获取对应的WeakReference对象,再通过调用WeakReference的get方法获取MyObject对象。需要注意的是,由于WeakReference只是进行弱引用,当该对象没有强引用时,可能会被垃圾回收器回收,因此get方法的返回值可能为空。

   此外,由于该代码没有对缓存进行任何清理,若缓存中的对象数量过多或者占用内存过大,可能会导致内存泄漏或OOM等问题。因此,建议在实际应用中对缓存进行定期清理或实现LRU策略等操作,以维持缓存的有效性和安全性。

优缺点分析

强引用

  强引用是Java中默认的引用类型,使用最为广泛。它具有如下优点:

  • 强引用能够保证在任何时候都能够访问到其指向的对象,因此非常方便。

但也具有如下缺点:

  • 强引用可能导致内存泄露。如果一个对象具有强引用,即使它已经不再需要,垃圾回收器也不会回收它。这种情况下,如果这种对象占用的内存很大,就可能会导致内存泄露问题。

软引用

  软引用是Java中的一种引用类型,用于指向那些有用但非必需的对象,可以在内存不足时回收。它具有如下优点:

  • 软引用可以有效地避免内存泄露问题。当内存不足时,垃圾回收器会回收被软引用指向的对象,从而释放内存。

但也具有如下缺点:

  • 软引用可能导致应用程序性能下降。当内存不足时,如果被软引用指向的对象很多,就会导致大量的垃圾回收操作,从而降低应用程序的性能。

弱引用

  弱引用则是一种比软引用更加弱化的引用类型,常用于关联非必须对象的引用。它具有如下优点:

  • 弱引用可以有效地避免内存泄露问题。无论内存是否足够,垃圾回收器都可能会回收被弱引用指向的对象,从而释放内存。

但也具有如下缺点:

  • 弱引用有可能导致对象被过早地回收。由于弱引用指向的对象不再具有强引用,因此即使应用程序还需要这些对象,它们也有可能会被垃圾回收器回收。

测试用例

测试代码演示

  Java中的引用类型分为强引用、软引用和弱引用。一般情况下,开发者使用的都是强引用来引用对象。当对象已经没有任何引用时,Java的垃圾回收器会自动回收这个没有引用的对象。但是如果我们需要在某些特殊场景中,对某些对象进行“缓存”或者“预处理”,需要在对象没有引用时不要立即回收它们,而是希望它们能够在需要的时候再被回收,这个时候就需要使用Java的软引用和弱引用了。

下面是一个测试用例,演示Java中的强引用、软引用和弱引用的不同特点:

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;public class ReferenceTypeTest {public static void main(String[] args) throws InterruptedException {testStrongReference();testSoftReference();testWeakReference();}private static void testStrongReference() {Object obj = new Object();System.out.println("Strong reference: " + obj);obj = null;System.gc();System.out.println("After gc, Strong reference: " + obj);}private static void testSoftReference() {SoftReference<Object> obj = new SoftReference<>(new Object());System.out.println("Soft reference: " + obj.get());System.gc();System.out.println("After gc, Soft reference: " + obj.get());}private static void testWeakReference() throws InterruptedException {WeakReference<Object> obj = new WeakReference<>(new Object());System.out.println("Weak reference: " + obj.get());System.gc();System.out.println("After gc, Weak reference: " + obj.get());Thread.sleep(1000);System.out.println("After 1s, Weak reference: " + obj.get());}
}

输出结果:

Strong reference: java.lang.Object@5acf9800
After gc, Strong reference: null
Soft reference: java.lang.Object@5acf9800
After gc, Soft reference: java.lang.Object@5acf9800
Weak reference: java.lang.Object@5acf9800
After gc, Weak reference: null
After 1s, Weak reference: null

可以看到:

  • 在强引用中,当对象没有引用时,垃圾回收器会立即回收这个对象。
  • 在软引用中,当内存空间足够时,对象不会被回收;当内存空间不足时,对象会被回收。
  • 在弱引用中,当垃圾回收器扫描到这个对象时,无论内存空间是否足够,都会将对象回收。在时间上,弱引用比软引用更容易回收。

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  这是一个测试Java中三种引用类型(强引用、软引用、弱引用)的代码。其中:

  • testStrongReference()方法创建一个强引用对象,将其赋值给变量obj,之后将obj设置为null,然后调用System.gc()进行垃圾回收,最后输出obj的值。由于强引用是Java中默认的引用类型,当强引用被置为null后,该对象就会成为垃圾,被回收,因此输出为null。
  • testSoftReference()方法创建一个软引用对象,并使用get()方法获取其引用的对象,输出该对象,然后调用System.gc()进行垃圾回收,再次输出该对象。由于软引用类型的特性是:当内存不足时,JVM会回收软引用对象,故在调用System.gc()后,未必能清理掉软引用对象,输出的结果大概率是一样的。
  • testWeakReference()方法创建一个弱引用对象,使用get()方法输出该对象,然后调用System.gc()进行垃圾回收,再次输出该对象。由于弱引用类型的特性是:一旦一个弱引用对象被垃圾回收器确定为垃圾,被回收后,就会被立即清理,所以在调用System.gc()后,输出的结果应该为null。另外,为了让JVM有机会回收该对象,代码中还使用了Thread.sleep()进行等待,确保JVM有时间进行垃圾回收。

结论

Java中的引用类型包含强引用、软引用和弱引用三种类型。这三种引用类型在应用程序开发中都有其独特的优缺点,开发者需要根据不同的场景选择合适的引用类型。在合理地使用引用类型的同时,也需要注意避免内存泄露等问题的发生。

  … …

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。

码字不易,如果这篇文章对你有所帮助,帮忙给bugj菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


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

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

相关文章

如何在ADS中实现数据的导入和导出

1 MDIF接口 ADS提供了一种通用的MDIF格式文件&#xff0c;允许用户使用一个通用的数据接口实现导入和导出的功能&#xff0c;其Help文件中的简介如下&#xff1a; 2 数据的导入 实现数据导入功能之前&#xff0c;数据必须遵从一定的标准格式&#xff0c;如下图所示&#xff0c;…

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署 模型介绍 BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型&#xff0c;参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果&#xff0c;对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…

我与C++的爱恋:类与对象(二)

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;我与C的爱恋 ​ 本篇着重介绍构造函数和析构函数&#xff0c;剩余内容在下篇解答。 一、类的默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 任何类在什么都不写时…

ThingsBoard通过服务端获取客户端属性或者共享属性

MQTT基础 客户端 MQTT连接 通过服务端获取属性值 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、通过服务端获取属性值 5、在客户端查看对应的客户端属性或者共享属性的key 6、查看整个…

基于spring boot的留守儿童爱心管理系统

基于spring boot的留守儿童爱心管理系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

《剑指 Offer》专项突破版 - 面试题 108 : 单词演变(C++ 实现)

目录 前言 单向广度优先搜索 双向广度优先搜索 前言 题目链接&#xff1a;单词演变 题目&#xff1a; 输入两个长度相同但内容不同的单词&#xff08;beginWord 和 endWord&#xff09;和一个单词列表&#xff08;wordList&#xff09;&#xff0c;求从 beginWord 到 end…

HTML5+CSS3小实例:荧光图标悬停效果

实例:荧光图标悬停效果 技术栈:HTML+CSS 字体图标库:font-awesome 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=d…

VulNyx - Ready

目录 信息收集 arp nmap nikto Redis未授权访问漏洞 漏洞扫描 redis-cli 写入公钥 ssh连接 get root.txt 信息收集 arp ┌─[rootparrot]─[~/vulnyx] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.102 Starti…

ZFT9 7VE8033同期脉冲发送装置 JSOEF约瑟

系列型号 ZFT9(PIG) 7VE8033同期脉冲发送装置; ZFT9(PIG) 7VE8043同期脉冲发送装置; ZFT9 7VE8033同期脉冲发送装置; ZFT9 7VE8043同期脉冲发送装置; 用途&#xff1a; ZFT9(PIG)同期脉冲发送装置用于船舶的三相系统&#xff0c;根据发电机和电力系统之间电压差、相位差、频率…

SAP SD学习笔记05 - SD中的一括处理(集中处理),出荷和请求的冻结(替代实现承认功能)

上一章讲了SD的重要概念&#xff0c;比如出荷Plant&#xff08;交货工厂&#xff09;&#xff0c;出荷Point&#xff08;装运点&#xff09;&#xff0c;输送计划&#xff0c;品目的可用性检查&#xff0c;一括纳入/分割纳入&#xff0c;仓库管理等。 SAP SD学习笔记04 - 出荷…

凡泰极客亮相2024 亚马逊云科技出海全球化论坛,为企业数字化出海赋能

随着「不出海&#xff0c;即出局」登上热搜榜单&#xff0c;企业出海已成燎原之势&#xff0c;3月29日&#xff0c;2024 亚马逊云科技出海全球化论坛在深圳成功举办&#xff0c;凡泰极客创始人梁启鸿受邀出席&#xff0c;并以 「App 2.0&#xff1a;以SuperApp构建智能数字生态…

K8s下部署grafana

1. 系统要求 最小化的软硬件要求 最小化硬件要求 磁盘空间: 1 GB内存: 750 MiB (approx 750 MB)CPU: 250m (approx 2.5 cores) 2. k8s部署grafana步骤 1) 创建名字空间 kubectl create namespace my-grafana 2) 创建yaml vim grafana.yaml yaml包含如下三个资源对象 Ob…

【七 (4)FineBI FCP模拟试卷-电站数据分析】

目录 文章导航一、字段解释1、电站基础信息表2、电站事实表 二、需求三、操作步骤1、将新增一列日期12、以左关联的形式增加装机容量3、年度发电总量4、年度售电完成率4、发电量及发电效率5、年售电完成比、售电回款比、管理费用比、运维费用比5、总装机容量6、最近日期7、最近…

Java基础-知识点03(面试|学习)

Java基础-知识点03 String类String类的作用及特性String不可以改变的原因及好处String、StringBuilder、StringBuffer的区别String中的replace和replaceAll的区别字符串拼接使用还是使用StringbuilderString中的equal()与Object方法中equals()区别String a new String("a…

使用 Docker 部署 Open-Resume 在线简历平台

1&#xff09;Open-Resume 介绍 GitHub&#xff1a; https://github.com/xitanggg/open-resume Open-Resume 是一款功能强大的开源 简历生成器 和 简历解析器 。可以帮助我们快速的生成个人简历&#xff0c;并定制化不同的主题和布局风格。该项目的目标是为每个人提供免费的现…

java数据结构与算法刷题-----LeetCode1009. 十进制整数的反码

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 476题相同解法 476题相同解法 解题思路&#xff1a; 因为此题和…

【I/O】基于事件驱动的 I/O 模型---Reactor

Reactor 模型 BIO 到 I/O 多路复用 为每个连接都创建一个线程 假设我们现在有一个服务器&#xff0c;想要对接多个客户端&#xff0c;那么最简单的方法就是服务端为每个连接都创建一个线程&#xff0c;处理完业务逻辑后&#xff0c;随着连接关闭线程也要销毁&#xff0c;但是…

每日一题---移除元素

文章目录 1.题目名称2.题目思路2.1.思路1:2.2.思路2&#xff1a; 3.参考代码 每日一题—移除元素 1.题目名称 2.题目思路 2.1.思路1: 创建一个新的数组&#xff0c;将值不为val的放到新的数组&#xff0c;然后在返回新的数组的大小&#xff0c;但是题目专门说啦&#xff0c;这…

Big Data and Cognitive Computing (IF=3.7) 期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机视觉相关工作的投稿&#xff01; 影响因子3.7&#xff0c;截止时间2024年12月31日 投稿咨询&#xff1a;lqyan18fudan.edu.cn 投稿网址&#xff1a;https://www.mdpi.com/journal/BDCC/special_iss…

Nature Machine Intelligence 纽约大学团队提出基于深度学习和语音生成技术的脑电-语音解码

由于神经系统的缺陷导致的失语会导致严重的生活障碍&#xff0c;它可能会限制人们的职业和社交生活。近年来&#xff0c;深度学习和脑机接口&#xff08;BCI&#xff09;技术的飞速发展为开发能够帮助失语者沟通的神经语音假肢提供了可行性。开发神经-语音解码器的尝试大多数依…