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

GC全场景分析

GC全场景分析

文章目录

  • GC全场景分析
    • 标记-清除法
      • **标记 - 清除法核心流程与 STW 机制**
      • **标记 - 清除法四步流程**
        • **1. STW 启动(暂停用户线程)**
        • **2. 标记可达对象(从根集合出发)**
        • **3. 清除未标记对象(回收堆内存)**
        • **4. 恢复用户线程(结束 STW)**
      • **根集合(Root Set)深度解析**
        • **1. 本质与作用**
        • **2. 分布与组成**
        • **3. 与 GC 的关键关系**
      • **对比与总结**
    • 三色标记法与屏障机制
        • **基本概念**
        • **标记流程**
    • 混合写屏障机制
        • **混合写屏障的核心规则**
        • **混合写屏障的 GC 流程改进**
        • **关键优势**
        • **与传统屏障的对比**
        • **示例说明**
      • **总结**

首先,GC 是一种垃圾处理机制。实现的方式由很多种算法:标记-清除法、三色标记法、屏障机制、混合写屏障机制等。下面,我将从go的角度,go实现过的gc算法进行学习记录和分析。

标记-清除法

标记 - 清除法核心流程与 STW 机制

核心动作:STW(Stop The World)

  • 定义:暂停所有应用程序线程,仅允许 GC 线程执行,确保垃圾回收过程中对象引用关系不变。
  • 目的
    ✅ 避免并发修改导致 浮动垃圾(应回收的对象未被标记)或 误标记(不可达对象被错误标记为存活)。
    ✅ 简化 GC 算法逻辑,无需处理多线程竞争问题。

标记 - 清除法四步流程

1. STW 启动(暂停用户线程)
  • 操作
    • GC 线程向所有应用线程发送暂停请求。
    • 线程执行到 安全点(Safepoint,如方法调用、循环结束处) 时主动暂停,确保此时对象引用稳定。
  • 关键点
    • 安全点机制避免线程在非稳定状态被暂停(如正在修改对象引用时)。
2. 标记可达对象(从根集合出发)
  • 标记逻辑
    • 根集合(Root Set) 开始,递归遍历所有 可达对象,标记为 存活(而非 “空闲”)。
    • 根集合组成
      ▶ 栈内存:线程栈中的局部变量、方法参数(对象引用)。
      ▶ 方法区:静态变量、类的 Class 对象。
      ▶ 寄存器:CPU 寄存器中存储的引用。
      ▶ JNI 引用:本地代码持有的全局对象引用。
  • 核心作用
    通过根集合确定所有存活对象,未被标记的对象判定为可回收垃圾。
3. 清除未标记对象(回收堆内存)
  • 操作
    扫描整个堆内存,释放所有未被标记的对象占用的空间。
  • 副作用
    ❗ 产生 内存碎片(不连续的空闲块),可能导致后续大对象分配失败,触发更多 GC。
4. 恢复用户线程(结束 STW)
  • 操作
    GC 完成后,通知所有应用线程从安全点继续执行。
  • 影响
    STW 期间应用无响应,过长的 STW 会导致系统延迟升高(如实时系统、高并发服务)。

根集合(Root Set)深度解析

1. 本质与作用
  • 定义:GC 标记的 初始起点集合,包含所有 直接可达的对象引用
  • 核心作用
    ✅ 作为递归遍历的起点,确保所有存活对象被标记。
    ✅ 隔离堆内存:GC 仅需关注根集合可达的对象,无需扫描整个堆。
2. 分布与组成
内存区域根集合成员示例
栈内存方法内的局部变量(如Object obj = new Object();
方法区静态变量(如static Object staticObj;)、类的 Class 对象
寄存器CPU 寄存器中存储的对象引用(由 JVM 底层管理)
JNI 本地堆本地代码通过NewGlobalRef创建的全局引用
3. 与 GC 的关键关系
  • 标记阶段的起点

    根集合 → 对象A → 对象B → 对象C(标记为存活)  
    ↘ 对象D(标记为存活)  
    

    未被根集合直接或间接引用的对象(如孤立对象)将被清除。

  • STW 的必要性
    若不暂停线程,根集合中的引用可能在标记过程中被修改(如赋值为null),导致标记结果错误。

对比与总结

维度标记 - 清除法根集合特点
STW 作用确保标记 / 清除阶段对象引用不变分布在栈、方法区、寄存器等多区域
标记对象存活对象(可达对象)包含静态变量、局部变量等直接引用
内存碎片会产生无需移动对象,仅标记 - 清除
优化方向结合分代 GC、增量标记减少 STW 时间减少静态变量引用,避免长生命周期对象

核心结论

  • 标记 - 清除法通过 STW 和根集合实现垃圾回收,适用于简单场景,但需注意内存碎片问题。
  • 根集合是 GC 的 “起点”,其组成与内存分布直接影响 GC 效率,合理管理根引用(如避免冗余静态变量)可优化 GC 性能。

三色标记法与屏障机制

基本概念
  • 三色定义
    • 白色:初始状态,未被垃圾回收器(GC)访问的对象
    • 灰色:已被 GC 访问,但内部引用的对象还未全部处理完
    • 黑色:已被 GC 完全处理,其引用的对象均已扫描完成
标记流程
  1. 初始标记(STW 阶段)
    • 暂停所有用户线程
    • 从根集合(全局变量、栈上变量等)出发,标记所有直接可达对象为灰色,并放入灰色队列
  2. 并发标记
    • 用户线程与 GC 线程同时运行
    • 处理灰色队列
      • 取出灰色对象,将其引用的白色对象标记为灰色并加入队列
      • 该灰色对象标记为黑色
    • 写屏障
      • 删除屏障:当灰色对象删除对白色对象的引用时,强制将白色对象标记为灰色
      • 插入屏障:黑色对象新增白色对象引用时,将白色对象标记为灰色
  3. 最终标记(STW 阶段)
    • 短暂暂停用户线程
    • 处理并发阶段遗留的少量标记任务,确保标记完整性
  4. 清除阶段
    • 回收所有白色对象(即不可达对象)
    • 重置黑色和灰色对象为白色,为下次 GC 做准备

混合写屏障机制

Go 语言从 1.8 版本开始引入混合写屏障,主要解决传统屏障的局限性:

  • 插入屏障(Insert Barrier):黑色对象插入白色对象引用时需标灰,但栈上对象扫描需 STW(因栈不适用写屏障)。
  • 删除屏障(Delete Barrier):灰色对象删除白色对象引用时需标灰,但可能导致浮动垃圾(本轮 GC 未回收)。

混合写屏障的目标

  1. 减少 STW 时间:避免扫描栈时的 STW。
  2. 简化 GC 流程:合并插入与删除屏障的优势。
混合写屏障的核心规则

混合写屏障同时应用以下两条规则:

  1. 插入屏障
    黑色对象引用白色对象时,强制将白色对象标记为灰色

    A().field = B() → B被标记为灰色
    
  2. 删除屏障(弱化版)
    对象(无论黑白)**删除对**白色对象的引用时,将该白色对象标记为灰色

    A(/).field = nil(原指向B()) → B被标记为灰色
    
  3. 栈保护
    栈上对象的引用变更不触发写屏障,但 GC 开始时会对栈进行并发扫描,扫描完成后栈上对象视为黑色(不再二次扫描)。

混合写屏障的 GC 流程改进
  1. 初始标记(STW)
    • 扫描根对象(全局变量、寄存器),标记直接可达对象为灰色。
    • 栈扫描:并发扫描所有 goroutine 的栈,标记栈上对象(但不扫描其引用的对象)。
  2. 并发标记
    • 处理灰色队列,标记对象为黑色。
    • 写屏障确保:
      ▶ 黑色对象新增白色引用时,白色对象被标灰。
      ▶ 对象删除白色引用时,白色对象被标灰。
    • 栈处理
      栈上对象在初始扫描后视为黑色,后续变更不触发屏障(依赖初始扫描的正确性)。
  3. 最终标记(STW)
    • 仅需短暂 STW,处理少量未完成的标记任务(如栈上残留的白色对象),无需重新扫描栈。
  4. 清除阶段
    • 并发清除所有白色对象。
关键优势
  1. 减少 STW 时间
    • 栈扫描与用户线程并发进行,仅需初始 STW 扫描一次,无需像插入屏障那样在标记结束后重新 STW 扫描栈。
  2. 简化 GC 流程
    • 统一处理堆上的插入和删除操作,逻辑更简洁。
  3. 降低内存压力
    • 相比删除屏障,混合写屏障减少了浮动垃圾的产生(因插入屏障的存在)。
与传统屏障的对比
特性插入屏障删除屏障混合写屏障
栈扫描 STW需要两次(初始 + 最终)仅初始一次仅初始一次(扫描一次栈全黑,使得无需二次扫描)
浮动垃圾有(下轮 GC 回收)极少(插入屏障抑制)
写屏障复杂度仅处理插入操作仅处理删除操作同时处理插入和删除
Go 版本1.5-1.7历史方案(未实际使用)1.8+
示例说明
// 场景:黑色对象A引用白色对象B,同时灰色对象C删除对B的引用
A.field = B  // 混合写屏障:B被标记为灰色(插入规则)
C.field = nil // 混合写屏障:B已被标灰(插入规则已处理),无需重复操作

通过混合写屏障,B 在被 A 引用时已被标灰,即使 C 删除引用,B 仍会被正确标记为存活对象。

总结

混合写屏障是 Go 语言 GC 的核心优化,通过合并插入与删除屏障的优势,大幅减少 STW 时间,同时降低内存压力。其核心设计思想是:

  1. 并发栈扫描:避免栈操作的写屏障,通过初始 STW 扫描一次栈。
  2. 堆上双重保护:通过插入和删除规则,确保引用变更时对象被正确标记。
  3. 最终 STW 优化:仅需短暂暂停处理残留任务,无需重新扫描栈。

这使得 Go 语言的 GC 在保证正确性的同时,实现了极致的低延迟,特别适合高并发场景。

相关文章:

GC全场景分析

GC全场景分析 文章目录 GC全场景分析标记-清除法**标记 - 清除法核心流程与 STW 机制****标记 - 清除法四步流程****1. STW 启动(暂停用户线程)****2. 标记可达对象(从根集合出发)****3. 清除未标记对象(回收堆内存&am…...

OSI七层模型和TCP/IP的五层(四层模型)

分层 1.什么是分层 我理解是对同一相同或者相似的事务或者操作功能进行分类,比如我们去餐厅吃饭,就可以分为好多层,客户层,服务员层,前台层,后厨层,每一层都专注自己的事情,客户层…...

MouseDown,MouseUp,LostMouseCapture的先后顺序

本文目标是实现如下功能: 按下一个按钮后置位某变量;鼠标松开后复位某个变量? 看似简单,但是一般来说会存在如下两种现象: 鼠标移出按钮:默认会丢失鼠标事件跟踪,即MouseLeftButtonUp事件并不会被触发。 焦点切换:Tab 键切换焦点会干扰按钮的事件捕获 本文通过几个…...

第8章 常用实用类

8.1 String类 在java.lang包(默认引入)中,可直接使用。 定义为final类,不能扩展String类,不可以继承,不可以有子类。 8.1.1 构造String对象 常量对象: 英文双引号括起来 String常量放入常…...

视差场(disparity field)

视差场(disparity field)是立体视觉中的一个重要概念,用于描述两幅立体图像之间像素的对应关系。以下是对视差场的详细解释: 1. 视差(Disparity)的定义 视差是指同一场景点在两幅立体图像中的像素位置差异…...

AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》

AI:OpenAI论坛分享—《AI重塑未来:技术、经济与战略》 导读:2025年4月24日,OpenAI论坛全面探讨了 AI 的发展趋势、技术范式、地缘政治影响以及对经济和社会的广泛影响。强调了 AI 的通用性、可扩展性和高级推理能力,以…...

【已经解决诸多问题】Mamba安装

mamba被称为新一代的计算架构,因此在CV和时序领域存在诸多的方案开始采用这一新架构,但是这个架构的安装过程中存在诸多问题!!!!为了更好帮助大家理解我们给出一个统一的安装流程!!&…...

计算机的基本组成与性能

1. 冯诺依曼体系结构:计算机组成的金字塔 1.1. 计算机的基本硬件组成 1.CPU - 中央处理器(Central Processing Unit)。 2.内存(Memory)。 3.主板(Motherboard)。主板的芯片组(Ch…...

“绿色邮政,智能九识”——呼和浩特邮政无人快递车发车,驶向智慧物流新时代!

5月12日,“绿色邮政,智能九识”呼和浩特邮政无人驾驶快递车发车。 此次投运的邮政无人驾驶快递车实力惊人:单车运量超1000件,时速达40公里,通过智能路径规划实现24小时作业,与传统运输相比,运转…...

AGI大模型(24):通过LangChain的接口来调用OpenAI对话

1 创建对话 使用langchain库中的ChatOpenAI类来创建一个对话模型。 from dotenv import load_dotenvload_dotenv()import os from langchain_openai import ChatOpenAIllm = ChatOpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),base_url="https://api.deepsee…...

大模型中的Token机制深度解析

目录 大模型中的Token机制深度解析 一、Token的本质与核心作用 二、主流分词算法对比 三、GPT-3分词机制详解 四、分词策略对模型性能的影响 五、工程实践建议 六、未来演进方向 一、Token的本质与核心作用 Token是大模型处理文本的​​最小语义单元​​,类似于人类语…...

【MySQL】库与表的操作

一、库的操作 1. 查看数据库 语法:show databases;这里的database是要加s的 查看当前自己所处的数据库:select database(); 例如下图,我当前所处的数据库就是在class1数据库 2. 创建数据库 语法:create database [if not e…...

创建指定版本的vite项目

1、获取vite的版本号 npm view create-vite versions 注:4.4.1版本即对应着node16版本的项目 2、创建制定版本的vite项目 npm init vite<version>...

java中的Servlet3.x详解

Servlet 3.x 是 Java Web 开发的重要里程碑&#xff0c;包含 Servlet 3.0&#xff08;2009年发布&#xff09;和 Servlet 3.1&#xff08;2013年发布&#xff09;两个主要版本。它通过多项革新优化了开发效率、性能及扩展性&#xff0c;成为现代 Java Web 应用的核心技术基础。…...

单目测距和双目测距 bev 3D车道线

单目视觉测距原理 单目视觉测距有两种方式。 第一种&#xff0c;是通过深度神经网络来预测深度&#xff0c;这需要大量的训练数据。训练后的单目视觉摄像头可以认识道路上最典型的参与者——人、汽车、卡车、摩托车&#xff0c;或是其他障碍物&#xff08;雪糕桶之类&#xf…...

weibo_comment_pc_tool | 我于2025.5月用python开发的评论采集软件,根据帖子链接爬取评论的界面工具

本工具仅限学术交流使用&#xff0c;严格遵循相关法律法规&#xff0c;符合平台内容的合法及合规性&#xff0c;禁止用于任何商业用途&#xff01; 一、背景分析 1.1 开发背景 微博&#xff08;以下简称wb&#xff09;是国内极具影响力的社交媒体平台&#xff0c;具有内容形式…...

ubuntu防火墙命令和放行ssh端口

一、关闭UFW防火墙&#xff08;Ubuntu默认工具&#xff09; 1. 临时关闭防火墙 sudo ufw disable sudo ufw status # 显示 Status: inactive 表示已关闭 2. 永久禁用防火墙&#xff08;禁用系统服务&#xff09; sudo systemctl stop ufw # 立即停止服务 sudo sy…...

PWM讲解+STM32任意频率、占空比、脉宽生成函数介绍

1.PWM讲解 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制。 脉宽调制 最开始使用PWM时&#xff0c;是做智能车时使用的舵机打角&#xff0c;电机驱动。这都属于比较浅显&#xff0c;普通的应用。下面和大家简单分享一下PWM的…...

C++23 范围迭代器作为非范围算法的输入 (P2408R5)

文章目录 一、引言二、C23及范围迭代器的背景知识2.1 C23概述2.2 范围迭代器的概念 三、P2408R5提案的内容3.1 提案背景3.2 提案内容 四、范围迭代器作为非范围算法输入的优势4.1 代码简洁性4.2 提高开发效率4.3 更好的兼容性 五、具体的代码示例5.1 使用范围迭代器进行并行计算…...

CVE-2018-1273 漏洞深度分析

漏洞概述 CVE-2018-1273 是 Spring Data Commons 中的一个高危远程代码执行&#xff08;RCE&#xff09;漏洞&#xff0c;影响版本为 Spring Data Commons 1.13–1.13.10 和 2.0–2.0.5。攻击者通过构造包含恶意 SpEL表达式的 HTTP 请求参数&#xff0c;触发表达式注入&#x…...

C++23:修正常量迭代器、哨兵和范围

文章目录 引言C20范围库回顾C23之前常量迭代器的问题视图可能不传播const代理对象的复杂性泛型代码中的一致性 P2278R4提案及C23的改进std::views::as_const的工作原理代码示例 浅const视图&#xff08;如std::span&#xff09;的改进总结 引言 在C的发展历程中&#xff0c;每…...

【漫话机器学习系列】266.雅可比矩阵(Jacobian Matrix)

雅可比矩阵&#xff08;Jacobian Matrix&#xff09;详解 | 多变量函数微积分的基石 在深度学习、计算图、优化算法、机器人控制、流形学习等众多领域中&#xff0c;“雅可比矩阵&#xff08;Jacobian Matrix&#xff09;”是一个非常核心的数学工具。 这篇文章将结合一张视觉…...

Leetcode 3551. Minimum Swaps to Sort by Digit Sum

Leetcode 3551. Minimum Swaps to Sort by Digit Sum 1. 解题思路2. 代码实现 题目链接&#xff1a;3551. Minimum Swaps to Sort by Digit Sum 1. 解题思路 这一题思路上我实现的非常暴力&#xff0c;就是先求出正确的排列&#xff0c;然后从头考察每一个元素是否处在其目标…...

西门子1200/1500博图(TIA Portal)寻址方式详解

西门子博图&#xff08;TIA Portal&#xff09;是西门子公司推出的自动化工程软件平台&#xff0c;广泛应用于工业自动化领域。在编写PLC程序时&#xff0c;寻址方式是一个非常重要的概念&#xff0c;它决定了如何访问和操作PLC中的数据和资源。本文将详细介绍西门子博图中的寻…...

STK手动建链+matlab联调

在右边场景区选择你要建链的卫星&#xff0c;右键在弹出的选项中选择Access 选择你要建链的卫星&#xff0c;这里我选择3轨10星与4轨8星建链&#xff0c;点击compute后再close就行了 建链完成&#xff0c;这里链路的颜色跟起始卫星的颜色一致&#xff0c;要想改变颜色只需改变卫…...

MATLAB中的Switch语句讲解

MATLAB中的Switch语句&#xff1a;一个简单的控制流工具 在MATLAB中&#xff0c;switch语句是一种多分支控制结构&#xff0c;通常用于根据某个表达式的值选择不同的代码块进行执行。它的作用类似于一系列的if-elseif-else语句&#xff0c;但在处理多个条件时&#xff0c;swit…...

【SpringBoot】✈️整合飞书群机器人发送消息

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时3分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&am…...

上位机知识篇---流式Web服务器模式的实现

文章目录 前言 前言 本文简单介绍了流式Web服务器模式的实现。...

Go 语言中的一等公民(First-Class Citizens)

在 Go 语言中&#xff0c;一等公民&#xff08;First-Class Citizens&#xff09; 是指语言中可以像普通值一样被自由操作的元素&#xff0c;包括赋值、传递、返回等。Go 虽然不是纯粹的函数式语言&#xff0c;但支持多种一等公民&#xff0c;以下是 Go 中常见的 一等公民及其特…...

python3.13版本降为3.12

目录 一、下载Python 二、安装PyCharm 三、 彩蛋 粗糙理解&#xff1a; PyThon是编译器&#xff08;也可以在命令行编辑&#xff0c;但是麻烦&#xff09; PyCharm是编辑器 一、下载Python https://repo.huaweicloud.com/python/3.12.9/python-3.12.9-amd64.exe 点击Insta…...

Ubuntu搭建TFTP服务器的方法

0 工具 Ubuntu 18.041 Ubuntu搭建TFTP服务器的方法 在Ubuntu下搭建TFTP服务器可以让我们下载文件到开发板更加方便&#xff0c;同时也可以实现TFTP加载Linux镜像&#xff0c;方便调试。 1.1 安装tftp-hpa&#xff08;TFTP客户端&#xff09;、tftpd-hpa&#xff08;TFTP服务…...

【AI】Ubuntu 22.04 4060Ti16G 基于SWIFT框架的LoRA微调 模型Qwen3-1.8B 数据集弱智吧 微调笔记

下载Qwen3-1.8B 先更新安装modescope&#xff0c;然后下载模型 pip install -U modelscope modelscope download --model Qwen/Qwen3-1.7B 下载日志 部署模型 参考&#xff1a;【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8_wsl ubantu rtx4060 vllm镜像-CSDN博…...

系分论文《论信息系统缓存的分析和应用》

【摘要】 2023年3月,我作为系统分析师参与了某大型电商平台"云端购物中心"的性能优化项目。该项目日均订单量突破200万,但在促销高峰期频繁出现系统响应迟缓、数据库过载等问题。本项目以构建多级缓存体系为核心,通过系统化分析缓存应用场景和技术选型,重构了平…...

3.4/Q2,Charls最新文章解读

文章题目&#xff1a;Associations between reversible and potentially reversible cognitive frailty and falls in community-dwelling older adults in China: a longitudinal study DOI&#xff1a;10.1186/s12877-025-05872-2 中文标题&#xff1a;中国社区老年人可逆性和…...

Bash fork 炸弹 —— :(){ :|: };:

&#x1f9e0; 什么是 Fork 炸弹&#xff1f; Fork 炸弹是一种拒绝服务&#xff08;DoS&#xff09;攻击技术&#xff0c;利用操作系统的 fork() 系统调用不断创建新进程&#xff0c;直到系统资源&#xff08;如进程表、CPU、内存&#xff09;被耗尽&#xff0c;从而使系统无法…...

HarmonyOS AVPlayer 音频播放器

鸿蒙文档中心&#xff1a;使用AVPlayer播放视频(ArkTS)文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/video-playback 这张图描述的是 HarmonyOS AVPlayer 音频播放器的状态流转过程&#xff0c;展示了 AVPlayer 在不同状态之间的切换条件和关键操作…...

symfonos: 2靶场

symfonos: 2 来自 <https://www.vulnhub.com/entry/symfonos-2,331/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.253 3&…...

微服务项目->在线oj系统(Java版 - 2)

相信自己,终会成功 微服务代码: lyyy-oj: 微服务 接口文档定义 响应数据定义: 响应数据格式:通常&#xff0c;HTTP API 的响应数据采用 JSON 格式 例如:成功响应&#xff08;带数据&#xff09; {"code": 200,"message": "查询成功","…...

整理了 2009 - 2025 年的【199 管综真题 + 解析】PDF,全套共 34 份文件

每年真题原卷 ✅ 每年详细解析 ✅ &#x1f4c2;【管综真题 2009-2025】 &#x1f4c2;【管综解析 2009-2025】 目录树&#xff1a; ├── 2009-2025管综真题 PDF │ ├── 2009年199管综真题.pdf │ ├── 2010年199管综真题.pdf │ ├── 2011年199管综真题.pd…...

HarmonyOS 与 OpenHarmony:同根而不同途

HarmonyOS 与 OpenHarmony&#xff1a;同根而不同途 引言 在操作系统领域&#xff0c;HarmonyOS 和 OpenHarmony 这两个名字频繁出现&#xff0c;它们之间既存在着千丝万缕的联系&#xff0c;又有诸多显著的区别。对于开发者和相关从业者而言&#xff0c;深入了解两者的差异点…...

并发编程(4)

final修饰 1. 用final修饰类 当一个类被final修饰时&#xff0c;意味着它不能被其他类继承&#xff0c;也就是该类无法派生出子类。像 Java 中的String类就是典型的final类。 public final class FinalClass {// 类的内容 }// 下面的代码会报错&#xff0c;因为FinalClass不…...

合并K个升序链表

目录 合并 K 个升序链表 解题思路 ListNode 数组方式给出 k 个链表 ArrayList 方式给出 k 个链表 ArrayList常见操作 合并 K 个升序链表 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后…...

UART、SPI、IIC复习总结

一、UART 1、UART和USART的异同&#xff1f; 相同点 基本功能&#xff1a;都是用于串行通信的数据收发设备&#xff0c;能够实现数据在不同设备之间的传输。在异步通信模式下&#xff0c;二者的工作方式相似&#xff0c;都使用起始位、数据位、校验位&#xff08;可选&#…...

【AWS入门】Amazon Bedrock简介

【AWS入门】Amazon Bedrock简介 [AWS Essentials] Brief Introduction Amazon Bedrock By JacksonML 1. 引言 Amazon Bedrock&#xff0c;在AWS官网&#xff0c;映入眼帘的第一句话就是&#xff0c;“使用基础模型构建和扩展生成式人工智能应用程序的最简单方法”。如下图所…...

报告精读:华为2024年知行合一通信行业数据治理实践指南报告【附全文阅读】

《华为 2024 年知行合一通信行业数据治理实践指南报告》聚焦通信行业数据治理&#xff0c;指出在数字化转型背景下&#xff0c;通信行业面临数据量庞大、类型多样、时效要求高、价值密度低、安全要求高等特点与数据质量、汇聚、开放等难点。报告提出通信行业数据治理需构建包含…...

Eigen与OpenCV矩阵操作全面对比:最大值、最小值、平均值

功能对比总表 功能Eigen 方法OpenCV 方法主要区别最大值mat.maxCoeff(&row, &col)cv::minMaxLoc(mat, NULL, &maxVal, NULL, &maxLoc)Eigen需要分开调用&#xff0c;OpenCV一次获取最小值mat.minCoeff(&row, &col)cv::minMaxLoc(mat, &minVal, NU…...

机器学习(12)——LGBM(1)

文章目录 LightGBM算法详解1. 算法背景2. 核心创新2.1 基于直方图的决策树算法2.2 单边梯度采样(GOSS)2.3 互斥特征捆绑(EFB) 3. 算法细节3.1 树生长策略3.2 特征并行与数据并行3.3 类别特征处理 4. 关键参数说明4.1 核心参数4.2 控制速度参数4.3 控制过拟合参数 5. 与XGBoost对…...

深入理解TCP与UDP:协议对比、头部结构与连接管理

一、TCP与UDP的核心区别 特性TCPUDP连接特性面向连接&#xff08;三次握手建立连接&#xff09;无连接&#xff0c;直接传输数据可靠性通过确认重传、排序、流控保证可靠尽力交付&#xff0c;不保证数据到达流量控制支持滑动窗口机制调节发送速率不支持数据分段支持大数据分段…...

Flask快速入门和问答项目源码

Flask基础入门 源码&#xff1a; gitee&#xff1a;我爱白米饭/Flask问答项目 - 码云 目录 1.安装环境2.【debug、host、port】3.【路由params和query】4.【模板】5.【静态文件】6.【数据库连接】6.1.安装模块6.2.创建数据库并测试连接6.3.创建数据表6.4.ORM增删改查 6.5.ORM模…...

python创建flask项目

好的&#xff0c;我会为你提供一个使用 Flask、pg8000 和 Pandas 构建的后台基本框架&#xff0c;用于手机理财产品 App 的报表分析接口。这个框架将包含异常处理、模块化的结构以支持多人协作&#xff0c;以及交易分析和收益分析的示例接口。 项目结构: financial_report_ap…...