当前位置: 首页 > news >正文

深入理解垃圾收集算法:从分代理论到经典回收策略

垃圾收集(Garbage Collection, GC)是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象,还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。

注: 由于各个平台的虚拟机在操作内存方面存在差异,暂不探讨各平台的具体实现细节。


一、垃圾收集算法的基本分类

从判定对象是否消亡的角度出发,垃圾收集算法主要可分为两大类:

  • 引用计数式垃圾收集(Reference Counting GC):直接在对象中维护一个引用计数器,每当有新的引用出现时加一,引用失效时减一。当计数器为0时认为该对象不再使用。然而,由于循环引用的问题,引用计数算法在主流 JVM 中并未使用。

  • 追踪式垃圾收集(Tracing GC):也称为“间接垃圾收集”,它通过从一组特殊的对象(GC Roots)开始,遍历引用链来判定对象是否可达。不可达的对象会被回收。本文介绍的所有算法均属于这一类。


二、分代收集理论:经验法则与内存划分

当前主流的 Java 虚拟机(如 HotSpot、OpenJ9 等)都采用了分代收集理论来设计垃圾收集器。分代收集理论并非严苛的数学定理,而是总结了大量程序运行数据后得到的经验法则,其基本思想基于以下三个假说:

1. 弱分代假说(Weak Generational Hypothesis)

  • 核心观点:绝大多数对象都是“朝生夕灭”的——例如方法内的临时变量、局部对象等,这些对象只存在极短的生命周期。

  • 实践意义:垃圾收集器可以设计出高频、低成本的回收策略,专门针对这些短命对象。

2. 强分代假说(Strong Generational Hypothesis)

  • 核心观点:熬过多次垃圾收集的对象往往具有较长的生命周期,即它们越难以消亡。

  • 实践意义:对于长生命周期的对象,回收的频率可以降低,以减少不必要的回收开销。

3. 跨代引用假说(Intergenerational Reference Hypothesis)

  • 核心观点:跨代引用(如老年代对象引用新生代对象)相对较少。换句话说,绝大部分对象引用发生在同一代中。

  • 实践意义:这使得在进行新生代垃圾收集(Minor GC)时,不必遍历整个老年代,而只需维护一个全局数据结构——记忆集(Remembered Set),记录那些存在跨代引用的内存块,从而显著降低回收时的扫描范围和性能开销。

Java 堆的区域划分

基于上述假说,JVM 通常将 Java 堆划分为以下几个区域:

  • 新生代(Young Generation)

    • Eden 区:新对象的主要分配区域,占大部分新生代空间(通常约80%)。

    • Survivor 区:用于存放经历一次或多次 Minor GC 后仍然存活的对象,通常分为两个区域(From 和 To,各占约10%)。

    • 特点:新生代回收频率高,大量对象在第一轮 GC 后被回收,存活对象则被复制到 Survivor 区,之后有可能晋升到老年代。

  • 老年代(Old Generation)

    • 存放经过多次 GC 后依然存活的对象,主要包括长生命周期的对象,如缓存、静态数据等。

    • 特点:回收频率较低,但每次回收可能需要处理更多的对象和更高的内存占用。

  • 其他区域:例如方法区(包含运行时常量池、类的元数据等)以及直接内存(不在 JVM 管理内存内,但用于高性能 I/O)。


三、经典垃圾收集算法

在追踪式垃圾收集范畴中,几种经典的垃圾收集算法各有侧重,它们通常以标记阶段为基础,不同之处在于如何回收垃圾对象和处理存活对象。

3.1 标记-清除算法(Mark-Sweep)

工作原理
  1. 标记阶段:从 GC Roots 开始,遍历所有可达对象,并对其做上标记。

  2. 清除阶段:扫描整个堆,回收所有未被标记的对象。

优缺点
  • 优点:实现简单,无需移动存活对象。

  • 缺点

    • 执行效率不稳定:当堆中大量对象需要回收时,标记和清除的操作会耗费较长时间。

    • 内存碎片化:清除后的堆内存可能分布不连续,导致后续大对象分配困难,可能引发额外的垃圾回收。

适用场景
  • CMS(Concurrent Mark Sweep)收集器的老年代回收往往采用标记-清除算法,但会结合碎片整理技术以应对碎片化问题。


3.2 标记-复制算法(Mark-Copy)

工作原理
  • 半区复制:将可用内存划分为两块(称为半区),一次只使用其中的一块。当这一块内存填满时,将存活对象复制到另一块内存上,然后清空当前区。

优点
  • 无碎片问题:复制过程中存活对象连续存放,内存分配更高效。

  • 顺序分配:复制后的内存空间是连续的,新对象可以顺序分配。

缺点
  • 空间浪费:因为每次只能使用一半的内存,内存利用率较低。

  • 复制开销:当存活对象较多时,复制的成本会急剧增加。

优化策略:Appel式回收
  • 内存布局优化:将新生代划分为一块较大的 Eden 区和两个较小的 Survivor 区,常见比例为 8:1:1(即 Eden 占80%,每个 Survivor 占10%)。

  • 分配担保:在发生 Minor GC 时,将 Eden 和一个 Survivor 中存活的对象复制到另一个 Survivor 区;若 Survivor 空间不足,则将对象直接晋升到老年代。这样设计既减少了复制负担,也为极端情况下的对象存活提供了安全保证。

适用场景
  • Serial、ParNew 等新生代收集器普遍采用标记-复制算法,因新生代中的对象大多数都能在第一轮 GC 中被回收。


3.3 标记-整理算法(Mark-Compact)

工作原理
  1. 标记阶段:与标记-清除算法类似,对存活对象进行标记。

  2. 整理阶段:将所有存活对象向内存的一端移动,形成一块连续的内存区域,然后清理掉移动后剩余的内存碎片。

优缺点
  • 优点:消除了内存碎片问题,便于后续大对象的分配。

  • 缺点

    • 移动开销大:移动对象需要更新所有对该对象的引用,这个过程非常消耗时间。

    • 停顿时间长:对象移动通常要求暂停所有用户线程(即“Stop The World”),这会对响应时间产生较大影响。

适用场景
  • 老年代垃圾收集往往使用标记-整理算法,因为老年代中的对象大部分存活,移动它们可以确保内存连续性,提升整体吞吐量。例如,HotSpot 中关注吞吐量的 Parallel Scavenge 收集器就采用了基于标记-整理算法的策略,而 CMS 则采用标记-清除算法以降低停顿时间。

折中方案
  • 有些垃圾收集器采用混合策略:平时使用标记-清除算法,容忍一定的内存碎片;当碎片化严重影响内存分配时,再采用标记-整理算法进行一次全堆整理,CMS就是采用这种方法。现代一些收集器(如 ZGC、Shenandoah)利用读屏障技术,实现整理过程与用户线程并发执行,降低停顿时间。


四、垃圾收集类型概览

为了应对不同场景和内存区域,垃圾收集器通常根据收集范围将 GC 分为以下几种类型:

类型范围触发条件典型收集器
Minor GC新生代Eden 区填满Serial、ParNew
Major GC老年代老年代空间不足CMS(仅老年代回收)
Mixed GC新生代 + 部分老年代针对 G1 等收集器的 Region 回收G1 收集器
Full GC整个堆及方法区空间分配失败或手动触发所有收集器(最终回收)

说明:不同收集器对 GC 类型的定义可能略有不同,需结合具体文档理解。


五、总结

  • 分代收集理论奠定了现代垃圾收集器的设计基础,通过将堆划分为新生代和老年代,实现了针对不同对象生命周期的“对症下药”。

  • 各类垃圾收集算法(标记-清除、标记-复制、标记-整理)各有优缺点,设计者往往需要在停顿时间、内存利用率、吞吐量之间做权衡。

  • 未来趋势:随着硬件技术和应用需求的发展,诸如 ZGC、Shenandoah 等新一代垃圾收集器正尝试在全区域收集模式下实现更低延迟和更高吞吐量,这将对传统分代模型提出挑战或改进。

相关文章:

深入理解垃圾收集算法:从分代理论到经典回收策略

垃圾收集(Garbage Collection, GC)是现代虚拟机自动内存管理的核心机制。它不仅能自动回收不再使用的对象,还能极大减轻开发者在内存管理上的负担。本文将详细讲解垃圾收集算法的基本思想、分代收集理论以及几种经典的垃圾收集算法。 注&…...

数据降维——PCA与LDA

特征选择和特征提取 特征选择和特征提取是数据降维的重要步骤。 1. 定义与目标 特征提取: 目标:通过变换(如投影、编码)将原始高维特征映射到新的低维空间,新特征是原始特征的组合(线性或非线性&#xff…...

机器学习中的 K-均值聚类算法及其优缺点

K-均值聚类是一种常用的无监督学习算法,用于将数据集中的样本分为 K 个簇。其工作原理是通过迭代优化来确定簇的中心点,实现样本的聚类。 算法步骤如下: 随机选择 K 个样本作为初始簇中心。根据每个样本和簇中心的距离将样本归类到最近的簇…...

RAID原理

一、RAID 0 原理 ​核心特点​ ​条带化(Striping)​:数据被分割成块(Block),交替写入多个磁盘​(至少2块)。​无冗余:不提供数据备份或校验,依赖所有磁盘同…...

2025系统分析师---软件工程:深度剖析常见软件开发方法

在软件工程这一复杂而精妙的领域中,软件开发方法的选择与实施无疑是项目成功的关键所在。作为一名资深软件技术专家,我深知不同的开发方法适用于不同的业务场景,各自具备独特的优缺点。本文将深入探讨几种常见的软件开发方法,包括…...

中文字符计数器,助力所有python对齐业务(DeepSeek代笔)

编码制式反推双宽,精准字宽库力推中文对齐。 笔记模板由python脚本于2025-03-26 23:49:24创建,本篇笔记适合为中文终端显示和文本输出对齐烦恼的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅…...

扫描注解指定路径

10.扫描注解 在 Spring Boot 中,EnableConfigurationProperties 和 ConfigurationPropertiesScan 是两个用于显式启用和管理 ConfigurationProperties 类的注解。它们提供了更灵活的方式来注册和扫描 ConfigurationProperties 类,尤其是在某些复杂场景或…...

像素到数据:Selenium,OpenCV,Tesseract,Python构建的智能解析系统

基于Selenium与OCR技术的网页信息智能提取方案 一、应用场景解析 在Web自动化测试和数据分析领域,经常需要处理动态渲染的网页信息,特别是当页面元素以图像形式呈现时。本文介绍的解决方案结合了浏览器自动化与图像识别技术,有效解决了以下典型场景: 动态渲染的可视化数据…...

徘徊检测:视觉分析技术的安防新方向

利用视觉分析的方式检测徘徊检测 背景 随着时代的发展,失业率上升导致社会不稳定因素增加,安保问题愈发突出。特别是在住宅区、工厂、办公园区等公共场所,对于徘徊人员的检测成为确保安全的关键一环。传统的安保手段如人工巡逻、监控录像回…...

CentOS 7 挂载与卸载文件系统

一、挂载文件系统​ 1. 查看系统磁盘与分区情况​ 在挂载文件系统之前,需要先了解系统中的磁盘和分区信息。使用fdisk -l命令,可列出所有磁盘和分区的详细信息,示例如下: [rootlocalhost ~]# fdisk -lDisk /dev/sda: 53.7 GB, …...

MySQL实战(尚硅谷)

要求 代码 # 准备数据 CREATE DATABASE IF NOT EXISTS company;USE company;CREATE TABLE IF NOT EXISTS employees(employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT );DESC employees;CREATE TABLE IF NOT EXISTS departments…...

JavaScript 改变 HTML 内容

JavaScript 改变 HTML 内容 JavaScript 改变 HTML 内容的核心在于通过 DOM(文档对象模型)操作实现动态更新,以下是主要方法及场景解析: 一、直接修改元素内容 1. innerHTML 属性 用于获取或设置元素的 HTML 内容(包…...

第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(部分题解)

文章目录 前言日期统计题意: 冶炼金属题意: 岛屿个数题意: 子串简写题意: 整数删除题意: 总结 前言 一年一度的🏀杯马上就要开始了,为了取得更好的成绩,好名字写了下前年2023年蓝桥…...

机器学习——Bagging、随机森林

相比于Boosting的集成学习框架,Bagging(Bootstrap Sampling,自助聚集法,又称为自助采样)作为一种自助聚集且并行化的集成学习方法,其通过组合多个基学习器的预测结果来提高模型的稳定性和泛化能力。其中随机森林是Bagging学习框架…...

数据库——MySQL基础操作

一、表结构与初始数据 假设存在以下两张表: 1. student 表 字段名数据类型描述idINT学生唯一标识符nameVARCHAR(100)学生姓名ageINT学生年龄sexVARCHAR(10)学生性别 初始数据: idnameagesex1张三20男2李四22女3王五21男 2. course 表 字段名数据类…...

存储过程、存储函数与触发器详解(MySQL 案例)

存储过程、存储函数与触发器详解(MySQL 案例) 一、存储过程(Stored Procedure) 定义 存储过程是预先编译好并存储在数据库中的一段 SQL 代码集合,可以接收参数、执行逻辑操作(如条件判断、循环)…...

2025年注册安全工程师考试练习题

注册安全工程师练习题,涵盖了不同的知识点和题型: 单选题 某机械制造企业委托具有相应资质的中介服务机构的专业技术人员为其提供安全生产管理服务。依据《安全生产法》,保证该企业安全生产的责任由( )负责。 A. 专业…...

Photoshop 2025安装包下载及Photoshop 2025详细图文安装教程

文章目录 前言一、Photoshop 2025安装包下载二、Photoshop 2025安装教程1.解压安装包2.运行程序3.修改安装路径4.设安装目录5.开始安装6.等安装完成7.关闭安装向导8.启动软件9.安装完成 前言 无论你是专业设计师,还是初涉图像处理的小白,Photoshop 2025…...

ESP32通过WiFi获取网络时间(NTP)

代码部分 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an "AS IS&…...

docker使用命令笔记

docker使用命令笔记 1. 安装docker2. 拉取镜像3. 镜像与容器4. 基于镜像创建容器4. 操作创建好的容器5. docker文件传输6. ubuntu的docker的一些基本环境搭建 记录docker的一些使用命令 1. 安装docker 遵循官方安装说明即可,windows需要下载docker desktop后在doc…...

关于服务器只能访问localhost:8111地址,局域网不能访问的问题

一、问题来源: 服务器是使用的阿里云的服务器,服务器端的8111端口没有设置任何别的限制,但是在阿里云服务器端并没有设置相应的tcp连接8111端口。 二、解决办法: 1、使用阿里云初始化好的端口;2、配置新的阿里云端口…...

触发器及报警

一、触发器介绍 Trigger 作用&#xff1a;报警 触发某一个监控项状态的变化 基于监控项创建 一个监控项可以有多个触发器 1、创建触发器语法 {<server>:<key>.<function>(<parameter>)}<operator><constant> {被监控主机:键值.函数…...

如何用 Postman 发送 GET 请求?详解

Postman 是一款广泛用于 API 开发和测试的工具&#xff0c;通过它&#xff0c;我们可以轻松地发送 GET 请求。首先&#xff0c;需要新建接口并设置为 GET 请求&#xff0c;然后填写相关的 URL 地址和参数&#xff0c;最后点击“Send”按钮即可发起请求。 Postman 如何发送 get…...

主流软件工程模型全景剖析

一、瀑布模型 阶段划分 需求分析&#xff1a;与用户深入沟通&#xff0c;全面了解软件的功能、性能、可靠性等要求&#xff0c;形成详细的需求规格说明书。设计阶段&#xff1a;包括总体设计和详细设计。总体设计确定软件的体系结构&#xff0c;如模块划分、模块之间的接口等&…...

NVMe协议

一、NVMe 的诞生背景 ​传统协议瓶颈&#xff1a; 早期的SATA接口SSD使用 ​AHCI协议&#xff0c;设计初衷是适配机械硬盘&#xff08;HDD&#xff09;&#xff0c;其单队列、高延迟的特性无法发挥SSD的高速性能。​PCIe接口的潜力&#xff1a; NVMe专为 ​PCIe接口的SSD​ 设…...

开关磁阻电机类型及其控制技术

开关磁阻电机( Switched Reluctance Motors,SRM) 具有结构简单、坚固、成本低、 工作可靠、控制灵活、运行效率高&#xff0c;适于高速与恶劣环境运行等优点, 由其构成的传动系统( Switched Reluctance Drives, SRD) 具有交、直流传动系统所没有的优点, 为此&#xff0c;世界各…...

CMake 构建的Qt 项目中的构建套件的配置

在Qt 框架中&#xff0c;使用CMake 构建工具时&#xff0c;需要自己给构建套件添加相关配置&#xff0c;否则已经添加的构建套件将不可选择使用。 创建CMake 项目后&#xff0c;如果打开项目配置时&#xff0c;出现如下构建套件不可选的情况&#xff0c; 需要先确认是否安装…...

程序化广告行业(34/89):移动端特色广告与创意策略探秘

程序化广告行业&#xff08;34/89&#xff09;&#xff1a;移动端特色广告与创意策略探秘 大家好&#xff01;在程序化广告的学习之旅中&#xff0c;每一次探索都像是发现了新大陆。今天&#xff0c;我依旧怀揣着和大家共同进步的想法&#xff0c;来和大家深入聊聊程序化广告行…...

IT行业项目管理风险规避策略

在IT项目中,前端、后端、测试等不同角色的协同工作会带来各种项目管理风险。以下是针对这些风险的规避策略: 一、跨职能团队协作风险 1. 沟通不畅风险 解决方案: 建立每日站会机制(15分钟以内)使用协作工具(如Jira、飞书、钉钉)制定明确的接口文档标准(Swagger/YAPI)…...

24届非科班硕士入职做上位机开发,后续往工业软件还是音视频、后端发展?

今天给大家分享的是一位粉丝的提问&#xff0c;24届非科班硕士入职做上位机开发&#xff0c;后续往工业软件还是音视频、后端发展&#xff1f; 接下来把粉丝的具体提问和我的回复分享给大家&#xff0c;希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问&#xff1a; …...

Hadoop三 分布式sql计算hive入门

一 分布式SQL计算 对数据进行统计分析&#xff0c;SQL是目前最为方便的编程工具。 大数据体系中充斥着非常多的统计分析场景&#xff0c;所以&#xff0c;使用SQL去处理数据&#xff0c;在大数据中也是有极大的需求的。MapReduce支持程序开发&#xff08;Java、Python等&#…...

【C++】C++中的动态内存分配(new和delete)

C中的动态内存分配&#xff08;分配堆空间&#xff09; 1. C语言与C动态内存分配2. 使用3.malloc和new有什么区别示例代码&#xff1a; 1. C语言与C动态内存分配 C语言 malloc calloc realloc free 函数 C new关键字分配堆空间 delete关键字释放堆空间 2. 使用 第一种&#…...

Go 代理爬虫

现在注册&#xff0c;还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器&#xff0c;通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支&#xff1a; basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…...

推陈换新系列————java8新特性(编程语言的文艺复兴)

文章目录 前言一、新特性秘籍二、Lambda表达式2.1 语法2.2 函数式接口2.3 内置函数式接口2.4 方法引用和构造器引用 三、Stream API3.1 基本概念3.2 实战3.3 优势 四、新的日期时间API4.1 核心概念与设计原则4.2 核心类详解4.2.1 LocalDate&#xff08;本地日期&#xff09;4.2…...

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...

树莓集团园区运营案例:成都国际数字影像产业园的运营逻辑​

成都国际数字影像产业园的成功运营&#xff0c;是树莓集团在产业园运营领域的典型案例。其运营逻辑可以归纳为以下几点&#xff1a; 一、政企合作&#xff0c;优势互补 园区由树莓集团与金牛区政府合作共建&#xff0c;这种模式充分利用双方的优势。政府提供政策支持、土地资…...

【动态规划】最长公共子序列问题 C++

问题描述 子序列&#xff1a;序列Z是原序列X的子序列&#xff0c;当且仅当Z的元素在X中按严格递增的下标顺序出现&#xff08;不要求连续&#xff09;。例如X{A,B,C,B,D,A,B}中&#xff0c;Z{B,C,D,B}是子序列&#xff0c;对应X的下标2→3→5→7。公共子序列&#xff1a;若序列…...

K8s故障排查手册:从Pod崩溃到网络不通

本文基于数百个真实生产环境案例&#xff0c;系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景&#xff0c;结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段&#xff0c;为企业运维团…...

HTML DOM 基础:用「家族树」理解网页操控术

HTML DOM 基础:用「家族树」理解网页操控术 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),也就是DOM。 DOM 是JavaScript 操作网页的接口,它的作用是将网页转为一个JavaScript 对象,从而可以用脚本进行各种操作(比如对元素增删内容)。 浏览…...

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…...

【AI News | 20250326】每日AI进展

AI News 1、Gemini 2.5&#xff1a;谷歌DeepMind最智能AI模型亮相 谷歌DeepMind推出Gemini 2.5&#xff0c;其最智能AI模型。首款实验版本Gemini 2.5 Pro在多项基准测试中领先&#xff0c;登顶LMArena榜首&#xff0c;展现卓越的推理与编码能力。该模型为“思考模型”&#xf…...

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…...

AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问

环境&#xff1a; AI-Sphere-Butler WSL2 Ubuntu22.04 Nginx 问题描述&#xff1a; AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理&#xff0c;并将HTTP升级成HTTPS&#xff0c;用于移动设备访问 解决方案&#xff1a; 一、生成加密证书 1.配置OpenSSL生成本地不加…...

SpringBoot项目图片上传成功,访问404

1. 配置文件&#xff0c;静态资源访问路径&#xff0c;记得加上file: 2.上传文件路径 以上配置是正确的&#xff0c;这样才可以正确映射 之前我再配置文件写的是,这是错的&#xff0c; 因为&#xff1a;classpath写法和绝对路径无法匹配 .addResourceLocations("classpat…...

鸿蒙学习笔记(2)-国际化配置、ArkTS简述

一、国际化配置 根据操作系统语言实现手动或者自动切换中英文&#xff0c;提供了多套语言包。编写过程中注意不要将文字写死&#xff0c;将文本放在指定的语言包文件夹中来保存&#xff0c;鸿蒙开发中默认实现中英文的国际化配置。若要实现中英文转化&#xff0c;需要在三个地…...

ES 字段的映射定义了字段的类型及其行为

在 Elasticsearch 中&#xff0c;字段的映射定义了字段的类型及其行为。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …...

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题&#xff0c;但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作&#xff0c;我们正在把一些内容整合进来&#xff0c;甚至是之前通过不同方式记录时间戳的旧平台层部分&#xff0c;现在也…...

未来二十年的量子计算

在未来二十年间&#xff0c;量子计算领域将迎来翻天覆地的变革&#xff0c;从实验室走向更广阔的应用舞台&#xff0c;重塑众多行业的格局。 在硬件层面&#xff0c;量子芯片的研发将持续精进。超导量子比特技术会不断突破&#xff0c;进一步提升比特数量与质量。当前&#xff…...

SpringBoot通过Map实现天然的策略模式

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBoot通过Map实现天然的策略模式 ⏱️ 创作时间&#xff1a; 202…...

MTKAndroid12 解决SystemUI下拉框中,长按WIFI图标会导致崩溃问题

解决SystemUI下拉框中&#xff0c;长按WIFI图标会导致崩溃问题 文章目录 场景参考资料修改文件解决方案日志源码分析 总结 场景 在部分产品中偶发性发现&#xff0c; SystemUI下拉框下拉后长按WIFI图标会导致崩溃问题&#xff0c;有时候是截屏、点击Home 按键后&#xff0c;长…...