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

垃圾收集GC的基本理解

垃圾收集的基本理解

GC 的基本算法

标记清除

从根开始将可能被引用的对象用递归的方式进行标记(标记阶段),然后再从根开始将全部对象按顺序扫描一遍,将没有被标记的对象进行回收(清除阶段)。
大多数情况下,这种标记是通过对象内部的标志(Flag)来实现的。标记清除算法的处理时间,是和存活对象数与对象总数的总和相关的。
作为标记清除的变形,还有一种叫做标记压缩(Mark and Compact)的算法,即标记存活对象,压缩(复制)存活对象到内存一端,其他的内存重新回收使用。

这两个的区别是,一个标记然后清理没有标记的,一个是标记然后压缩标记的。

标记清理很明显会产生很多内存碎片,而标记压缩则是产生连续可用的内存块,缺点就是消耗的时间会比标记清理多。

复制收集

标记清除算法有一个缺点,就是在分配了大量对象,并且其中只有一小部分存活的情况下,所消耗的时间会大大超过必要的值,这是因为在清除阶段还需要对大量死亡对象进行扫描。

复制收集(Copy and Collection)则试图克服这一缺点。在这种算法中,会将从根开始被引用的对象复制到另外的空间中,然后,再将复制的对象所能够引用的对象用递归的方式不断复制下去。 复制完成之后,“死亡”对象就被留在了旧空间中。 再将旧空间废弃掉,就可以将死亡对象所占用的空间一口气全部释放出来。

这种方法就是只复制存活的对象,所以存活对象的多少会影响消耗的时间。

这种方法的缺点是需要消耗两倍的空间,一个新空间存之前的对象,一个是旧空间留下了“死亡”的对象。

引用计数

它的基本原理是,在每个对象中保存该对象的引用计数,当引用发生增减时对计数进行更新。
引用计数的增减,一般发生在变量赋值、对象内容更新、函数结束(局部变量不再被引用)等时间点。当一个对象的引用计数变为 0 时,则说明它将来不会再被引用,因此可以释放相应的内存空间。

优点

  • 实现简单
  • 当对象不再被引用的瞬间就会被释放,其他的 GC 机制中,要预测一个对象何时会被释放是很困难的。
  • 而且,由于释放操作是针对每个对象个别执行的,因此和其他算法相比,由 GC 而产生的中断时间(Pause time)就比较短,这也是一个优点。

缺点

  • 是无法释放循环引用的对象

例如下面的对象是没有其他对象引用的,但是彼此是有应用,就构成了一个独立的应用块。

A ───→ B 
↑      | 
|      ↓ 
+───── C 
  • 引用计数管理并不适合并行处理

如果多个线程同时对引用计数进行增减的话,引用计数的值就可能会产生不一致的问题(结果则会导致内存错误)。为了避免这种
情况的发生,对引用计数的操作必须采用独占的方式来进行。如果引用操作频繁发生,每次都要使用加锁等并发控制机制的话,其开销也是不可小觑的。

GC 的进阶算法

GC 的基本算法,大体上都逃不出上述三种方式以及它们的衍生品。现在,通过对这三种方式进行融合,出现了一些更加高级的方式。这里介绍一下其中最有代表性的三种,即分代回收、增量回收和并行回收。有些情况下,也可以对这些方法中的几种进行组合使用。

分代回收

在一般的程序中大部分对象都会在短时间内成为垃圾,而经过一定时间依然存活的对象往往拥有较长的寿命。如果寿命长的对象更容易存活下来,寿命短的对象则会被很快废弃,那么到底怎样做才能让 GC 变得更加高效呢?如果对分配不久,诞生时间较短的“年轻”对象进行重点扫描,应该就可以更有效地回收大部分垃圾。基于这种思想,可以把内存分代,新创建的对象划分到young generation, 而经过几轮回收后依然存活的对象划分到old generation。那么只要仅仅扫描young generation,就可以回收掉废弃对象中的很大一部分。

Jvm Heap 内存分代抽象
+---------------------+----------------+----------------+-------------+ |       Eden          |      S1        |      S2        |   Old Gen   | | (Young Generation)  | (Young Gen)    | (Young Gen)    | (Tenured)   | +----------↓----------+------↓---------+------↓---------+-----↑-------+ │                 │                │               │         ├────────── Minor GC (Copying) ────────────┤       │         │   (存活对象在 S1/S2 之间复制)              │       │        └───────────────────⇄──────────────────────┘       │        │       Promotion (晋升阈值)      
分代回收的实现过程

The young generation consists of eden and two survivor spaces. Most objects are initially allocated in eden. One survivor space is empty at any time, and serves as the destination of live objects in eden and the other survivor space during garbage collection; after garbage collection, eden and the source survivor space are empty. In the next garbage collection, the purpose of the two survivor spaces are exchanged. The one space recently filled is a source of live objects that are copied into the other survivor space. Objects are copied between survivor spaces in this way until they’ve been copied a certain number of times or there isn’t enough space left there. These objects are copied into the old Generation.

从上面的过程可以看出,分代回收也是有使用到 复制收集 算法的。

一个特别的问题

如果只扫描young generation,那么从老年代对新生代的引用就不会被检测到。 为了解决这个问题,在分代回收中,会
对对象的更新进行监视,将从老生代对新生代的引用,记录在一个叫做记录集(remembered set)的表中。在执行minor GC 的过程中,
这个记录集也作为一个根来对待。

要让分代回收正确工作,必须使记录集的内容保持更新。为此,在老生代到新生代的引用产生的瞬间,就必须对该引用进行记录,而负责执行这个操作的子程序,需要被嵌入到所有涉及对象更新操作的地方。
这个负责记录引用的子程序是这样工作的。设有两个对象:A 和 B,当对 A 的内容进行改写,并加入对 B 的引用时,如果 A 属于老生代对象,B 属于新生代对象,则将该引用添加到记录集中。
这种检查程序需要对所有涉及修改对象内容的地方进行保护,因此被称为写屏障(Write barrier)。写屏障不仅用于分代回收,同时也用在很多其他的 GC 算法中。

总结

分代回收通过减少 GC 中扫描的对象数量,达到缩短 GC 带来的平均中断时间的效果。不过由于还是需要进行大回收,因此最大中断时间并没有得到什么改善。从吞吐量来看,在对象
寿命假说能够成立的程序中,由于扫描对象数量的减少,可以达到非常不错的成绩。但是,其性能会被程序行为、分代数量、大回收触发条件等因素大幅度左右。

增量回收

在对实时性要求很高的程序中,比起缩短 GC 的平均中断时间,往往更重视缩短 GC 的最大中断时间。在这些对实时性要求很高的程序中,必须能够对 GC 所产生的中断时间做出预测。例如,可以将“最多只能中断 10 毫秒”作为附加条件。

在一般的 GC 算法中,作出这样的保证是不可能的,因为 GC 产生的中断时间与对象的数量和状态有关。因此,为了维持程序的实时性,不等到 GC 全部完成,而是将 GC 操作细分成多个部分逐一执行。这种方式被称为增量回收(Incremental GC)。

工作原理
  1. 分片执行:将完整的GC过程分解为多个增量步骤

  2. 交替执行:在增量步骤之间穿插应用程序的执行

  3. 渐进完成:经过多个增量步骤后完成整个GC过程

与传统GC的对比
特性 传统GC 增量GC
停顿时间 长(一次性完成) 短(分多次完成)
总耗时 较短 稍长(有额外开销)
适用场景 对延迟不敏感 需要低延迟


// 创建一些对象
let a = { name: "Object A" };
let b = { name: "Object B" };
a.ref = b;
b.ref = a;// 增量GC可能这样工作:
1. 标记阶段开始(标记根对象)- 停顿5ms
2. 程序继续执行- 用户操作可以响应
3. 标记子对象- 停顿5ms
4. 程序继续执行
5. 清理阶段- 停顿5ms
与传统GC的对比
特性传统GC增量GC
停顿时间长(一次性完成)短(分多次完成)
总耗时较短稍长(有额外开销)
适用场景对延迟不敏感的系统需要低延迟的系统

由于增量回收的过程是分步渐进式的,可以将中断时间控制在一定长度之内。另一方面,由于中断操作需要消耗一定的时间,GC 所消耗的总时间就会相应增加,正所谓有得必有失。

并行回收

并行回收的基本原理是,是在原有的程序运行的同时进行 GC 操作,这一点和增量回收是相似的。
不过,相对于在一个 CPU 上进行 GC 任务分割的增量回收来说,并行回收可以利用多CPU 的性能,尽可能让这些 GC 任务并行(同时)进行。由于软件运行和 GC 操作是同时进行的,因此就会遇到和增量回收相同的问题。为了解决这个问题,并行回收也需要用写屏障来对当前的状态信息保持更新。不过,让 GC 操作完全并行,而一点都不影响原有程序的运行,是做不到的。因此在 GC 操作的某些特定阶段,还是需要暂停原有程序的运行。

垃圾收集器G1简介

G1 is a generational, incremental, parallel, mostly concurrent, stop-the-world, and evacuating garbage collector which monitors pause-time goals in each of the stop-the-world pauses.

G1 的描述里就提到 分代,增量,并行等概念。
而 evacuation 也是类似 复制收集算法,只是基于G1的regions做了优化。

Evacuation is a region-based, targeted form of copying and collection, optimized for modern, large-heap, multi-threaded applications.
Copy & collect algorithms are simpler and operate on a coarse level (whole generation or semispace), with less adaptability.

References

松本行弘 - 代码的未来
Garbage-First (G1) Garbage Collector

相关文章:

垃圾收集GC的基本理解

垃圾收集的基本理解 GC 的基本算法 标记清除 从根开始将可能被引用的对象用递归的方式进行标记(标记阶段),然后再从根开始将全部对象按顺序扫描一遍,将没有被标记的对象进行回收(清除阶段)。 大多数情况…...

JVM——Java的基本类型的实现

Java 基本类型在 JVM 中的实现 Java 作为一种广泛使用的编程语言,其在虚拟机(JVM)上的实现细节对于开发者来说至关重要。本文将详细讲解 Java 基本类型在 JVM 中的实现,去深入理解 Java 编程语言的底层工作机制。 Java 基本类型…...

临床回归分析及AI推理

在医疗保健决策越来越受数据驱动的时代,回归分析已成为临床医生和研究人员最强大的工具之一。无论是预测结果、调整混杂因素、建模生存时间还是理解诊断性能,回归模型都为将原始数据转化为临床洞察提供了统计学基础。 AI推理 然而,随着技术…...

Ubuntu 22.04 的 ROS 2 和 Carla 设置指南(其一)

重点介绍适用于 Ubuntu 22.04 的全面 ROS 2 和 Carla 设置指南。我们将首先安装 Terminator 终端,然后安装 ROS 2 依赖项,然后继续安装 ROS 2 Humble。接下来,我们将介绍如何在 Ubuntu 22.04 上安装 Carla,最后通过设置 Carla ROS…...

声明:个人从未主动把文章设置为仅vip可读

之前一直在公司忙就没看csdn这边,前几天朋友看到我的博客是仅vip可读我才发现这个 给我气笑了。。。不反馈默认同意。。。。 现在都已经改回来 写文章的初衷就是记录一下自己的学习过程,本来就是一些偏基础类的东西,还需要去买vip才能看就太…...

【大模型系列篇】Qwen3开源全新一代大语言模型来了,深入思考,更快行动

Qwen3开源模型全览 Qwen3是全球最强开源模型(MoEDense) Qwen3 采用混合专家(MoE)架构,总参数量 235B,激活仅需 22B。 Qwen3 预训练数据量达 36T,并在后训练阶段多轮强化学习,将非思…...

DeepSeek-Prover-V2-671B 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)

DeepSeek-Prover-V2-671B 最新发布:专为数学定理自动证明设计的超大语言模型 体验地址:Hugging Face 在线体验 推荐入口:Novita 平台直达链接(含邀请码) 一、模型简介 DeepSeek-Prover-V2-671B 是 DeepSeek 团队于 2…...

Gupta-Sproull 抗据此画线算法

本文源自于:从https://www.inf.ed.ac.uk/teaching/courses/cg/lectures/cg4_2012.pdf Gupta-Sproull是在Brensenham的画线算法基础上得到。 为了防止之前的链接失效,特地搬运一下...

idea写spark程序

使用IntelliJ IDEA编写Spark程序的完整指南 一、环境准备 安装必要软件 IntelliJ IDEA (推荐Ultimate版,Community版也可) JDK 8或11 Scala插件(在IDEA中安装) Spark最新版本(本地开发可以用embedded模式) 创建项目 打开IDEA → New Project 选择"Maven…...

视觉问答论文解析:《Skywork R1V2: Multimodal Hybrid Reinforcement Learning for Reasoning》

《Skywork R1V2: Multimodal Hybrid Reinforcement Learning for Reasoning》论文解析 一、研究背景与动机 近年来,“慢思考”多模态模型(如 OpenAI-o1、GeminiThinking、Kimi-1.5 和 Skywork-R1V)在数学和科学领域的复杂推理任务中取得了显…...

修改linux账号名

修改linux账号名 结论是步骤1.临时创建一个辅助账户执行操作2.注销当前账户,登录 tempadmin 用户。3.使用它修改 旧用户名olduser:4.(可选)删除临时用户: 结论是 不可以直接修改,要么需要创建一个临时用户来打辅助. …...

计算机图形学:(二)MVP变换示例

前言 当在阅读计算机图形学系列的书籍时,会发现大部分图书每章内容都如出一辙。从个人实际体会来讲,虽然能理解书中大部分的知识,但到了实际使用时却有点抓耳挠腮。因此,在写了计算机图形学:(一&#xff09…...

PostgreSQL中的SSL(2)

PGSQL数据库的默认隔离级别是读提交,并且同时支持可重复读和序列化模式。但是在9.1之前的版本中,序列化模式是采用快照隔离来实现,并非是真正的序列化模式。 这样的话就会存在一个问题,那就是写偏序(Write Skew&#…...

Linux 部署以paddle Serving 的方式部署 PaddleOCR CPU版本

强烈建议您在Docker内构建Paddle Serving,更多镜像请查看Docker镜像列表。 提示-1:Paddle Serving项目仅支持Python3.6/3.7/3.8/3.9,接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。 提示-2:以下示例中GPU环境均…...

苏德战争前期苏联损失惨重(马井堂)

苏德战争前期(1941年6月22日德国发动“巴巴罗萨行动”至1941年底至1942年初)是苏联在二战中损失最惨重的阶段之一。以下是主要方面的损失概述: ‌一、军事损失‌ ‌人员伤亡与俘虏‌ 至1941年底,苏军伤亡约‌300万人‌&#xff…...

SI5338-EVB Usage Guide(LVPECL、LVDS、HCSL、CMOS、SSTL、HSTL)

目录 1. 简介 1.1 EVB 介绍 1.2 Si5338 Block Diagram 2. EVB 详解 2.1 实物图 2.2 基本配置 2.2.1 Universal Pin 2.2.2 IIC I/F 2.2.3 Input Clocks 2.2.4 Output Frequencies 2.2.5 Output Driver 2.2.6 Freq and Phase Offset 2.2.7 Spread Spectrum 2.2.8 快…...

LeetCode LCP40 心算挑战题解

看似一道简单的题目,实则不然,没有看评论的话,实在想不出来怎么写。 现在则由我来转述思想供大家参考理解,还是先给出示例,供大家更好的理解这个题目。 输入:cards [1,2,8,9], cnt 3输出:18解…...

Smart Link+Monitor Link组网

1.技术背景及原理 一般情况下,Smart Link只能感知与其接口直连的链路故障。将Monitor Link配置在Smart Link的上游设备上,可使Smart Link迅速感知上游链路故障,进行链路切换。Smart Link与Monitor Link配合使用,扩大了Smart Link…...

【计算机网络】​TCP(传输控制协议)套接字,多线程远程执行命令编程​

📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:UDP套接字编程(英汉字典以及多线程聊天室编写&#xff09…...

PostgreSQL 中 VACUUM FULL 对索引的影响

PostgreSQL 中 VACUUM FULL 对索引的影响 是的,VACUUM FULL 会重建表上的所有索引。这是它与普通 VACUUM 命令的一个重要区别。 一、VACUUM FULL 的工作原理 表重建过程: 创建表的全新副本只将有效数据写入新存储删除原始表文件将新文件重命名为原表名…...

DeepSeek本地部署及WebUI可视化完全指南

以下是为您整理的DeepSeek本地部署及WebUI可视化完全指南,整合了官方文档及社区实践的最佳方案: 一、环境准备 1. 硬件需求 CPU:推荐支持AVX2指令集的Intel i7或AMD Ryzen 7及以上处理器 。 GPU(可选但推荐)&#xf…...

大模型时代的新燃料:大规模拟真多风格语音合成数据集

以大模型技术为核心驱动力的人工智能变革浪潮中,语音交互领域正迎来广阔的成长空间,应用场景持续拓宽与延伸。 其中,数据作为驱动语音大模型进化的关键要素,重要性愈发凸显。丰富多样的高质量数据能够让语音大模型充分学习到语音…...

单体项目到微服务的架构演变与K8s发展是否会代替微服务

单体项目到微服务的架构演变与K8s发展是否会代替微服务 在互联网大厂Java求职者的面试中,经常会被问到关于单体项目到微服务的架构演变以及Kubernetes(k8s)的发展是否会代替微服务的相关问题。本文通过一个故事场景来展示这些问题的实际解决…...

AI驱动的决策智能系统(AIDP)和自然语言交互式分析

在当今快速变化的商业环境中,以下几个企业级系统领域最有可能成为新的热点,其驱动力来自数字化转型加速、AI技术爆发、全球化协同需求以及ESG(环境、社会、治理)合规压力的叠加 1. AI驱动的决策智能系统(AIDP&#xf…...

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源,它提供了七层(应用层)的负载均衡功能。Ingress可以根据主机名、…...

全面接入!Qwen3现已上线千帆

百度智能云千帆正式上线通义千问团队开源的最新一代Qwen3系列模型,包括旗舰级MoE模型Qwen3-235B-A22B、轻量级MoE模型Qwen3-30B-A3B。千帆大模型平台开源模型进一步扩充,以多维开放的模型服务、全栈模型开发、应用开发工具链、多模态数据治理及安全的能力…...

Python-日志检测异常行为的详细技术方案

以下是根据行为日志检测异常行为的详细技术方案,涵盖数据收集、特征工程、模型选择、部署与优化的全流程: 1. 数据收集与预处理 1.1 数据来源 行为日志通常包括以下类型: 用户行为日志:点击、登录、交易、页面停留时间等。系统…...

DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题

DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题 DeepSeek 团队于 2025 年 4 月 30 日正式在Hugging Face开源了其重量级新作 —— DeepSeek-Prover-V2-671B,这是一款专为解决数学定理证明和形式化推理任务而设计的超大规模语…...

Java写数据结构:队列

1.概念: 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列&#xf…...

LeetCode 2905 找出满足差值条件的下标II 题解

示例 nums [8, 3, 12, 5, 1, 10, 7, 13] indexDifference 3 valueDifference 6答案 [maxIdx, j] [0, 4]我的思路是直接枚举写,但这题是中等题,一定不会让你好过的,所以也是喜提了超时,先说一下我的做题思路吧。 其实很简单就…...

【思考】欧洲大停电分析

当地时间4月28日中午,西班牙和葡萄牙发生了大规模停电事故,两国多个地区的电力供应中断,波及超过5000万伊比利亚半岛民众,交通、通信、医疗等关键领域受到影响,马德里网球公开赛因停电被迫暂停,周边法国、意…...

[论文精读]Agent综述—— A survey on large language model based autonomous agents

A survey on large language model based autonomous agents ⏲️年份: 2024 👀期刊: Frontiers of Computer Science 🌱影响因子:3.4 📚数字对象唯一标识符DOl: 10.1007/s11704-024-40231-1 🤵作者: Wang Lei,Ma Chen,Feng X…...

金融风控的“天眼”:遥感技术的创新应用

在金融市场的复杂博弈中,风险管控一直是金融机构的核心竞争力。然而,传统的风控手段在应对现代金融市场的快速变化时,往往显得捉襟见肘。 如今,遥感技术的创新应用为金融风控带来了全新的视角和手段。星图云开放平台的遥感金融立体…...

SpringMVC知识点总结(速查速记)

文章目录 前言1、MVC是什么2、SpringMVC是什么3、SpringMVC请求流程 && 环境搭建3.1 SpringMVC请求流程3.2 搭建环境3.2.1开发环境3.2.2 环境配置步骤 4. url地址映射 && 参数绑定4.1 url地址映射之RequestMapping①、映射单个url②、映射多个url③、映射url到…...

配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤

1. 修改 PostgreSQL 配置文件 a. 修改 postgresql.conf 找到 PostgreSQL 的主配置文件 postgresql.conf&#xff0c;通常位于 /etc/postgresql/<版本号>/main/ 目录下。修改 listen_addresses 项的值为 *&#xff0c;表示允许来自任何 IP 地址的连接&#xff1a; sudo…...

涨薪技术|0到1学会性能测试第42课-apache监控与调优

前面的推文我们学习了操作系统性能监控与调优知识,如CPU、内存、磁盘、网络监控等,今天开始分享中间件apache监控与调优知识,后续文章都会系统分享干货,带大家从0到1学会性能测试! Apache是世界上使用最多的web服务器软件一种,它可以运行在几乎所有广泛使用的计算机平台上…...

【学习笔记】Shell编程--Bash变量

变量类型说明环境变量 与Shell的执行环境相关的一些变量。如PATH&#xff0c;HOME等&#xff0c;用户可重新定义。 一、环境变量的创建&#xff1a;export&#xff0c; export ABCD2 二、环境变量的查看 使用echo命令查看单个环境变量。如&#xff1a; echo $PATH 使用printenv…...

SpringBoot+Redis全局唯一ID生成器

&#x1f4e6; 优雅版 Redis ID 生成器工具类 支持&#xff1a; 项目启动时自动初始化起始值获取自增 ID 方法yml 配置化起始值可灵活扩展多业务线 ID &#x1f4cc; application.yml 配置 id-generator:member-start-value: 1000000000&#x1f4cc; 配置类&#xff1a;IdG…...

micro-app前端微服务原理解析

一、核心设计思想 基于 WebComponents 的组件化渲染 micro-app 借鉴 WebComponents 的 CustomElement 和 ShadowDom 特性&#xff0c;将子应用封装为类似 WebComponent 的自定义标签&#xff08;如 <micro-app>&#xff09;。通过 ShadowDom 的天然隔离机制&#xff0c;实…...

大连理工大学选修课——机器学习笔记(7):集成学习及随机森林

集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力&#xff1f; 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…...

[特殊字符] Spring Cloud 微服务配置统一管理:基于 Nacos 的最佳实践详解

在微服务架构中&#xff0c;配置文件众多、管理复杂是常见问题。本文将手把手演示如何将配置集中托管到 Nacos&#xff0c;并在 Spring Cloud Alibaba 项目中实现统一配置管理 自动刷新机制。 一、为什么要使用 Nacos 统一配置&#xff1f; 传统方式下&#xff0c;每个服务都…...

【mysql】执行过程,背诵版

sql执行再mysql的执行过程 1. 建立连接 sql通过tcp/ip发送到服务器服务器检查用户名&#xff0c;密码&#xff0c;权限创建线程处理连接 如果是sql8.0之前&#xff0c;select会先从缓存中查找&#xff0c;命中则返回&#xff0c;由于表结构变更会导致缓存失效&#xff0c;已废…...

[Survey] Image Segmentation in Foundation Model Era: A Survey

BaseInfo TitleImage Segmentation in Foundation Model Era: A SurveyAdresshttps://arxiv.org/pdf/2408.12957Journal/Time-Author北理工、上交、浙大 CCAI 、瑞士苏黎世联邦理工学院、德国慕尼黑工业大学Codehttps://github.com/stanley-313/ImageSegFM-Survey 1. Introdu…...

关于杰理ac791切换版本, git clone下来仍然是最新版本问题

在git clone 之后&#xff0c;在本地切换分支 常规流程&#xff1a;git clone →git branch →git branch -a → git checkout 分支名...

生成项目.gitignore文件的多种高效方式

在使用 Git 进行版本控制时&#xff0c;.gitignore 文件是不可或缺的配置文件。它可以帮助我们指定哪些文件或目录不需要被 Git 跟踪&#xff0c;从而避免将不必要的文件&#xff08;如临时文件、编译生成的文件等&#xff09;提交到仓库中。这篇文章将介绍几种生成 .gitignore…...

2025年“深圳杯”数学建模挑战赛D题-法医物证多人身份鉴定问题

法医物证多人身份鉴定问题 小驴数模 犯罪现场法医物证鉴定是关系到国家安全、公共安全、人民生命财产安全和社会稳定的重大问题。目前法医物证鉴定依赖DNA分析技术不断提升。DNA检验的核心是STR&#xff08;Short Tandem Repeat&#xff0c;短串联重复序列&#xff09;分析技术…...

嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

一、数组操作&#xff1a;3x3 数组的对角和、偶数和、奇数和 题目 求 3x3 数组的对角元素和、偶数元素和、奇数元素和。 知识点 数组遍历&#xff1a;通过双重循环访问数组的每个元素&#xff0c;外层循环控制行&#xff0c;内层循环控制列。对角元素判断&#xff1a; 主对…...

JAVA SE 反射,枚举与lambda表达式

文章目录 &#x1f4d5;1. 反射✏️1.1 反射相关的类✏️1.2 Class类中的相关方法✏️1.3 Field类中的相关方法✏️1.4 Method类中的相关方法✏️1.5 Constructor类中的相关方法✏️1.6 获取Class对象的三种方式✏️1.7 反射的使用 &#x1f4d5;2. 枚举2.1 枚举的定义✏️2.2 …...

每日算法-250430

每日算法 - 2025年4月30日 记录下今天解决的两道题目。 870. 优势洗牌 (Advantage Shuffle) 题目描述 解题思路与方法 核心思想&#xff1a;贪心策略 (田忌赛马) 这道题的目标是对于 nums1 中的每个元素&#xff0c;找到 nums2 中一个比它小的元素进行配对&#xff08;如果…...

MacOS 安装 cocoapods

MacOS 安装 cocoapods 下面使用 HomeBrew 安装 cocoapods 一、检测 HomeBrew 是否安装 打开终端执行命令 brew -v #如果安装&#xff0c;输出如 Homebrew 4.5.0如果未安装 Mac HomeBrew安装 二、检测 ruby 是否安装 系统一般自带了 ruby 但是这个升级有些麻烦&#xff0c;我…...