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

JVM 垃圾回收器

以下是对主流 JVM 垃圾回收器的详细解析,涵盖 

一、Serial GC(单线程串行回收器)

二、Parallel GC(吞吐量优先回收器)

三、CMS(Concurrent Mark Sweep,低延迟回收器)

四、G1(Garbage-First,区域分代回收器)

五、ZGC(超低延迟回收器)

六、Shenandoah(OpenJDK 低延迟回收器)

 的核心机制、适用场景及横向对比,帮助理解不同垃圾回收器的设计哲学与性能特点。

一、Serial GC(单线程串行回收器)

核心机制
  • 算法
    • 新生代:复制算法(Copying Algorithm),将存活对象从 Eden/Survivor 复制到另一块 Survivor。
    • 老年代:标记 - 整理算法(Mark-Compact),标记存活对象后压缩内存空间。
  • 执行特点
    • 单线程:GC 时需 Stop The World(STW),暂停所有应用线程,全程由一条 GC 线程完成。
    • 简单高效:无线程切换开销,适合内存较小的环境。
关键参数
-XX:+UseSerialGC        # 启用 Serial GC(默认用于 Client 模式)
-XX:SurvivorRatio=8     # Eden:Survivor 比例(默认 8:1)
适用场景
  • 嵌入式设备或 单核心服务器(如小型桌面应用)。
  • 内存 < 1GB 的场景,STW 时间可控。
优缺点
优点缺点
简单可靠,无额外内存开销单线程导致 STW 时间较长
适合内存小的场景无法利用多核 CPU 优势

二、Parallel GC(吞吐量优先回收器)

核心机制
  • 算法
    • 新生代:多线程复制算法,并行执行垃圾回收。
    • 老年代:多线程标记 - 整理算法(JDK 8 前为 Serial Old,JDK 9+ 为 Parallel Old)。
  • 执行特点
    • 多线程并行:通过 -XX:ParallelGCThreads 设置线程数,利用多核 CPU 缩短 STW 时间。
    • 目标吞吐量:通过 -XX:GCTimeRatio 控制 GC 时间占比(默认 99%,即 GC 时间 ≤ 1%)。
关键参数
-XX:+UseParallelGC      # 启用 Parallel GC(默认用于 Server 模式)
-XX:MaxGCPauseMillis=100 # 目标最大停顿时间(毫秒,动态调整堆大小)
-XX:GCTimeRatio=99      # 吞吐量目标(1/(1+N),N=99 即吞吐量 99%)
适用场景
  • 后台计算任务(如大数据处理、科学计算),优先保证吞吐量。
  • 堆内存中等大小(如 4-8GB),允许较短 STW 但需高持续处理能力。
优缺点
优点缺点
多线程提升吞吐量停顿时间仍随堆增大而增长
自动调优(自适应策略)无法满足低延迟需求

三、CMS(Concurrent Mark Sweep,低延迟回收器)

核心机制
  • 算法
    • 标记 - 清除(Mark-Sweep):老年代使用该算法,避免整理内存的 STW 开销。
    • 分代设计:新生代用 Parallel Scavenge(多线程复制),老年代用 CMS 并发回收。
  • 执行阶段(老年代):
    1. 初始标记(STW):标记根对象,耗时短。
    2. 并发标记:与应用线程并行标记可达对象。
    3. 重新标记(STW):修正并发标记期间的变动,耗时短。
    4. 并发清除:与应用线程并行清除垃圾对象。
关键参数
-XX:+UseConcMarkSweepGC  # 启用 CMS GC
-XX:CMSInitiatingOccupancyFraction=70 # 老年代占用 70% 时触发 GC
-XX:+CMSParallelRemarkEnabled # 启用并行重新标记(减少 STW 时间)
适用场景
  • 交互式应用(如 Web 服务器、前端服务),需降低 STW 对用户体验的影响。
  • 堆内存较大(如 8-16GB),但对象存活率较高(老年代占比大)。
优缺点
优点缺点
老年代并发回收,STW 时间短标记 - 清除导致内存碎片
适合低延迟场景并发阶段占用 CPU 资源
分代设计提升回收效率可能触发 "Concurrent Mode Failure"(回收速度慢于分配速度)

四、G1(Garbage-First,区域分代回收器)

核心机制
  • 分区(Region)设计
    • 将堆划分为大小相等的 Region(如 2MB-32MB),每个 Region 可动态扮演 Eden、Survivor、Old 或 Humongous(大对象)。
    • 优先回收价值高的区域:通过记录每个 Region 的垃圾占比,优先处理回收收益最大的区域(Garbage-First 得名)。
  • 算法
    • 新生代:多线程复制算法,回收 Eden/Survivor 区域。
    • 老年代:并发标记 + 混合回收(部分 Old Region + 新生代),基于标记 - 整理算法。
执行阶段
  1. 初始标记(STW):标记根对象。
  2. 并发标记:与应用线程并行标记可达对象。
  3. 最终标记(STW):处理 SATB 日志(Snapshot At The Beginning,记录并发阶段新增引用)。
  4. 筛选回收(STW):计算各 Region 回收收益,选择部分 Old Region 与新生代混合回收。
关键参数
-XX:+UseG1GC            # 启用 G1 GC
-XX:G1HeapRegionSize=4m # 设置 Region 大小(自动推算默认值)
-XX:MaxGCPauseMillis=200 # 目标最大停顿时间(默认 200ms)
-XX:G1MixedGCCountTarget=8 # 混合回收时最大 Region 数
适用场景
  • 大内存(8GB+) 且 需要兼顾吞吐量与低延迟 的场景(如微服务、中间件)。
  • 对象分配频率高(如新生代大对象多),或存在大量中等大小对象(避免进入 Humongous Region)。
优缺点
优点缺点
分区设计避免内存碎片内存占用高(每个 Region 需元数据)
可预测的停顿时间并发标记阶段耗 CPU 资源
混合回收应对老年代回收调优复杂度高于 CMS/Parallel

五、ZGC(超低延迟回收器)

核心机制
  • 着色指针(Colored Pointers)
    • 将对象引用的低 4 位用于存储 GC 状态(如标记位、重映射状态),无需修改对象头,减少内存访问开销。
  • 读屏障(Load Barrier)
    • 在读取对象引用时动态修正指针(如对象被移动到新 Region,通过读屏障获取新地址)。
  • 并发标记 - 整理
    • 全程几乎无 STW(仅初始标记和再标记有极短停顿,通常 <1ms),支持 TB 级堆内存。
执行阶段
  1. 初始标记(STW):标记根对象,耗时极短。
  2. 并发标记:与应用线程并行标记可达对象。
  3. 再标记(STW):处理并发标记期间的引用变动,耗时极短。
  4. 并发转移:移动存活对象到新 Region,通过读屏障修正所有引用。
关键参数
-XX:+UseZGC              # 启用 ZGC(JDK 11+)
-XX:ZHeapMaxSize=8t      # 最大堆内存(支持 TB 级)
-XX:ZCollectionInterval=1000 # 强制 GC 间隔(毫秒,避免碎片累积)
适用场景
  • 超大堆内存(16GB-8TB)且 对延迟敏感 的场景(如金融交易、实时数据处理)。
  • 云原生环境(如 Kubernetes 弹性扩缩容),需快速启动和低停顿。
优缺点
优点缺点
停顿时间 <10ms,几乎无感知吞吐量略低于 G1(约 95%)
支持动态堆大小调整仅 JDK 11+ 可用,需谨慎适配
分代设计(JDK 15+)提升年轻代回收效率

六、Shenandoah(OpenJDK 低延迟回收器)

核心机制
  • 转发指针(Forwarding Pointer)
    • 在对象头中添加指针,指向对象的新地址(移动后通过该指针修正引用)。
  • 布鲁姆过滤器(Bloom Filter)
    • 快速判断对象是否已被移动,减少无效的指针扫描,提升并发性能。
  • 并发标记 - 复制
    • 与 ZGC 类似,全程并发执行,仅初始标记和最终标记有短暂 STW。
执行阶段
  1. 初始标记(STW):标记根对象。
  2. 并发标记:与应用线程并行标记可达对象。
  3. 最终标记(STW):处理漏标的对象,耗时短。
  4. 并发回收:移动存活对象到新 Region,通过转发指针更新引用。
关键参数
-XX:+UseShenandoahGC     # 启用 Shenandoah(OpenJDK 12+)
-XX:ShenandoahGCMode=主动/被动 # 触发模式(主动模式基于内存阈值,被动响应分配压力)
-XX:MaxGCPauseMillis=10  # 目标停顿时间(默认 10ms)
适用场景
  • 大内存(8GB-2TB)且 需要 OpenJDK 原生支持 的场景(如开源项目、非商业环境)。
  • 对吞吐量要求中等,但需严格控制延迟的应用(如消息中间件、实时分析系统)。
优缺点
优点缺点
停顿时间与 ZGC 相当吞吐量低于 G1(约 90%)
内存占用低(转发指针仅占对象头)商业 JDK 需授权(OpenJDK 免费)
社区活跃,适配性强调优参数较多,需深入理解机制

七、横向对比表格

维度Serial GCParallel GCCMSG1ZGCShenandoah
设计目标简单单线程高吞吐量低延迟(老年代)平衡吞吐量与延迟超低延迟(TB 级)超低延迟(OpenJDK)
堆大小推荐小(<1GB)中等(4-8GB)中大(8-16GB)大(8GB+)超大(16GB+)大(8GB-2TB)
STW 时间中等短(老年代并发)可控(<500ms)极短(<10ms)极短(<10ms)
算法核心复制 + 标记整理并行复制 + 整理并发标记 - 清除分区 + 混合回收着色指针 + 并发整理转发指针 + 并发复制
适用场景嵌入式 / 单核心后台计算Web 服务微服务 / 中间件金融 / 实时数据开源 / OpenJDK 环境
JDK 版本全版本全版本JDK 1.4+JDK 7+JDK 11+OpenJDK 12+
典型参数-XX:+UseSerialGC-XX:+UseParallelGC-XX:+UseConcMarkSweepGC-XX:+UseG1GC-XX:+UseZGC-XX:+UseShenandoahGC

八、选择建议

  1. 小内存 / 简单场景
    • 优先选 Serial GC(单核心)或 Parallel GC(多核、需吞吐量)。
  2. 中等内存 / 低延迟需求
    • 选 CMS(老年代对象多)或 G1(对象分配频繁、需分代回收)。
  3. 大内存 / 超低延迟
    • 商业场景选 ZGC(JDK 11+,Oracle/OpenJDK);
    • 开源场景选 Shenandoah(OpenJDK 12+,避免授权问题)。
  4. 云原生 / 弹性扩缩容
    • 优先 ZGC(支持动态堆调整和超大内存)。

九、发展趋势

  • ZGC/Shenandoah 主导未来:逐步替代 G1 成为大内存场景的默认选择。
  • 分代与并发结合:如 ZGC 支持分代(JDK 15+),提升年轻代回收效率。
  • 硬件协同优化:利用 CPU 特性(如 AMD 的 MMU 分页)加速 GC 指针操作。

通过理解不同垃圾回收器的设计 trade-off,可根据具体业务需求(吞吐量、延迟、内存大小)选择最优方案,或通过组合参数(如 G1 的 -XX:InitiatingHeapOccupancyPercent)进一步调优。

相关文章:

JVM 垃圾回收器

以下是对主流 JVM 垃圾回收器的详细解析&#xff0c;涵盖 一、Serial GC&#xff08;单线程串行回收器&#xff09; 二、Parallel GC&#xff08;吞吐量优先回收器&#xff09; 三、CMS&#xff08;Concurrent Mark Sweep&#xff0c;低延迟回收器&#xff09; 四、G1&…...

JUC入门(三)

7、Callable 1、可以有返回值 2、可以抛出异常 3、方法不同 run()/call() 代码测试 老版本的应用 package com.yw.callable;public class Old {public static void main(String[] args) {new Thread(new MyThread()).start();} }class MyThread implements Runnable{Overri…...

RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据

通过代码的方式同时获取SMARTP模式的VENC码流数据和普通GOP模式的VENC码流数据&#xff0c;并进行对比画质。 一.RV1126 VI采集摄像头数据并同时编码SMARTP模式和普通GOP模式的编码码流流程 RV1126利用多线程同时获取普通GOP的VENC码流数据和SMARTP的码流数据一般如上图&#…...

MySQL事务、视图、索引、备份和恢复

1. 事务 如果不使用事务&#xff0c;那么如果出现了张三账户汇款成功-500元&#xff0c;但是李四那边的服务器出现了故障没有接收到500元&#xff0c;那么就会出现张三账户里有500元但是李四那边的账户还是1元的情况&#xff0c;转账的500元被吞了。 创建事务 2. 视图 创建视图…...

yolov8训练模型优化模型【误检】

针对 YOLOv8 模型在电动车人脸检测中出现误检行人人脸的问题&#xff0c;结合最新研究与实践经验&#xff0c;以下提供多维度优化方案及具体实施步骤&#xff1a; 一、数据集优化 数据清洗与标注增强 剔除干扰样本&#xff1a;确保训练集中所有标注仅包含骑行状态的人脸&#x…...

初识MySQL · 索引

目录 前言&#xff1a; 重温磁盘 认识索引 为什么这么做&#xff0c;怎么做 重谈page 聚簇索引VS非聚簇索引 回表查询 索引分类 前言&#xff1a; 前文我们主要是介绍了MySQL的一些基本操作&#xff0c;增删查改一类的操作都介绍了&#xff0c;并且因为大多数情况下&am…...

Kubernetes in action-配置和应用升级

Kubernetes的配置和应用升级 1、配置1.1 configMap1.2 secret1.3 Downward API1.4 Kubernetes API 2、服务升级2.1 升级方式2.1.1 先删除所有的旧版pod&#xff0c;使用新版本pod替换2.1.2 先创建新版pod&#xff0c;再删除旧版本pod2.1.3 滚动优化 2.2 使用deployment声明式升…...

十三、面向对象底层逻辑-Dubbo序列化Serialization接口

一、引言&#xff1a;分布式通信的数据桥梁 在分布式服务调用中&#xff0c;参数的跨网络传输需要将对象转化为二进制流&#xff0c;这一过程直接影响系统的性能、兼容性与安全性。Dubbo通过Serialization接口构建了可扩展的序列化体系&#xff0c;支持多种序列化协议的无缝切…...

5.19 打卡

DAY 30 模块和库的导入 知识点回顾&#xff1a; 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑&#xff1a;找到根目录&#xff08;python解释器的目录和终端的目录不一致&#xff09; 作业&#xff1a;自己新建几个不同路径文件尝试下如何导入...

MathType公式如何按照(1)(2)…编号

在word中使用mathtype插入公式&#xff0c;发现插入的公式编号默认为(1.1),(1.2)…&#xff0c;但论文中常用的公式编号是(1)(2)…&#xff0c;分享一下如何实现(1.1)→(1)。 ①word菜单找到“MathType”&#xff0c;点击“插入编号”-“格式化”。 ②取消勾选“章编号”和“节…...

解决即使安装了pageoffice网页还是无法跳转、点击按钮没有反应等问题

出现的现象&#xff1a; 安装了pageoffice网页还是无法跳转、点击按钮没有反应 网页提示的错误&#xff1a; 点击按钮之前右键检查网页发现的错误&#xff1a; 点击无效按钮之后右键检查出现的错误&#xff1a; 原因&#xff1a; 鉴于安全性的考虑&#xff0c;新版浏览器不支…...

正点原子STM32新建工程

MDK 源自德国的 KEIL 公司&#xff0c;是 RealView MDK 的简称。 MDK5 由两个部分组成&#xff1a; MDK Core 和 Software Packs。 MDK Core 又分成四个部分&#xff1a; uVision IDE with Editor&#xff08;编辑器&#xff09;&#xff0c; ARMC/C Compiler&#xff08;编译…...

计算机网络 第三章:运输层(一)

运输层位于应用层和网络层之间&#xff0c;是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务。通常特别关注因特网协议&#xff0c;即 TCP 和 UDP 运输层协议。 讨论运输层和网络层的关析&#xff0c;为研究运输层第一个关键功能&#xff…...

机器学习(14)——模型调参

文章目录 一、动态调参方法论1. 调参策略选择2. 千万数据优化原则 二、模型调参策略对比1. LightGBM调参路线2. XGBoost调参路线3. 随机森林调参策略 三、代码实现示例通用数据准备&#xff08;适用于所有模型&#xff09;1. LightGBM调参示例2. XGBoost调参示例3. 随机森林调参…...

基于PetaLinux的Zynq PS应用自启动全攻略

一、嵌入式Linux启动管理的艺术 在工业机器人、智能摄像头、边缘计算网关等场景中,开机自启动管理是系统可靠性的第一道关卡。本文将深入讲解Zynq PS端在PetaLinux环境下实现: Systemd服务深度定制启动时序精准控制启动速度优化技巧动态服务管理创新方案二、环境搭建与工程配…...

贪心算法:多处最优服务次序、删数问题

多处最优服务次序问题 问题描述:设有n个顾客同时等待一项服务。顾客i需要的服务时间为ti(1≤i≤n)&#xff0c;共有s处可以提供此项服务。应如何安排n个顾客的服务次序,才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。 算法设计:对于给定的n个顾…...

使用 Flask 框架实现FTP,允许用户通过 Web 界面浏览和下载文件夹中的所有文件

Flask 文件和文件夹下载服务实现 以下是一个基于 Flask 框架的简单 Web 服务&#xff0c;用于开放指定文件夹&#xff08;./shared_files&#xff09;&#xff0c;允许用户通过浏览器浏览和下载文件夹中的所有文件和子文件夹。ZIP 和 TAR 文件将直接下载&#xff0c;而文件夹将…...

【Go】从0开始学习Go

文章目录 从0开始学习Go0 与C对比1 代码框架1.1 helloworld式代码示例1.2 主体代码元素&#xff08;核心三部分&#xff09;1.3 其他 2 与C/C区别3 有用的小工具4 注意事项 从0开始学习Go 0 与C对比 特性CGo编译型语言需要编译为机器码直接编译为二进制可执行文件静态类型类型…...

软件设计师SQL考点分析——求三连

一、考点分值占比与趋势分析 综合知识分值统计表&#xff08;75分制&#xff09; 年份考题数量分值分值占比考察重点2018334%关系代数、权限控制2019222.67%SQL注入、授权语句2020445.33%投影操作、权限回收2021334%视图操作、权限传递2022222.67%数据库安全、WITH GRANT OPT…...

使用tcs34725传感器和51单片机识别颜色

使用TCS34725颜色传感器和51单片机来识别颜色是一个非常有趣的项目。TCS34725是一种常用的RGB颜色传感器&#xff0c;能够测量红、绿、蓝光的强度&#xff0c;从而实现颜色识别。 1. 硬件连接 TCS34725传感器通过IC接口与51单片机连接。以下是连接方式&#xff1a; SDA&…...

数据库-oracle-包-视图传参

并发下可能不准确 -- 修改包规范 CREATE OR REPLACE PACKAGE sczz.p_view_param IS function set_n(n varchar2) return varchar2; function get_n return varchar2; function set_ny(ny varchar2) return varchar2; function get_ny return varchar2; …...

深入探讨Java中的上下文传递与ThreadLocal的局限性及Scoped Values的兴起

在Java开发中,特别是在依赖框架的应用程序中,上下文数据的管理是一个常见但具有挑战性的问题。上下文数据可能包括元数据、配置信息或其他需要在代码不同部分之间共享的信息。传统的做法是通过方法参数显式传递这些上下文,但这种方法会导致代码复杂、难以维护,尤其是在大型…...

Spring boot 学习笔记2

Maven 项目管理工具&#xff1a;Maven 通过 pom.xml&#xff08;Project Object Model&#xff09;文件描述项目配置&#xff0c;包括依赖、构建流程、插件等&#xff0c;实现项目标准化管理 依赖管理&#xff1a;自动下载并管理项目所需的第三方库&#xff08;如 Spring、MyB…...

“保证医疗器械信息来源合法 真实、安全的保障措施、情况说明及相关证明”模板

保证医疗器械信息来源合法真实、安全的保障措施、情况说明及相关证明 一、医疗器械信息来源合法、真实、安全的管理措施 目前我公司网站所展示的医疗器械是企业代理品种&#xff0c;是取得合法注册资格的产品&#xff0c;拥有合法证明文件的产品。本网站仅展示本公司行政许可…...

Feature Toggle 不再乱:如何设计一个干净、安全、可控的特性开关系统?

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

不锈钢保温容器行业2025数据分析报告

不锈钢保温容器市场概况 2024年全球不锈钢保温容器市场规模约为453.3亿元&#xff0c;预计到2031年将增长至608.3亿元&#xff0c;年均复合增长率&#xff08;CAGR&#xff09;为4.3%。这一增长主要得益于全球范围内对保温容器需求的持续增加&#xff0c;尤其是在户外活动、餐…...

leetcode239 滑动窗口最大值deque方式

这段文字描述的是使用单调队列&#xff08;Monotonic Queue&#xff09; 解决滑动窗口最大值问题的优化算法。我来简单解释一下&#xff1a; 核心思路 问题分析&#xff1a;在滑动窗口中&#xff0c;若存在两个下标 i < j 且 nums[i] ≤ nums[j]&#xff0c;则 nums[i] 永远…...

腾讯云怎么在游戏云中助力

腾讯云游戏云&#xff1a;依托深厚游戏基因&#xff0c;打造高质量全方位生态平台 在竞争激烈的云计算市场中&#xff0c;腾讯云凭借其得天独厚的游戏生态资源和深耕多年的技术沉淀&#xff0c;正成为游戏行业不可忽视的重要力量。腾讯不仅是全球领先的游戏开发和发行商&#…...

深入理解pip:Python包管理的核心工具与实战指南

# 深入理解pip&#xff1a;Python包管理的核心工具与实战指南 在Python开发中&#xff0c;第三方库是提升效率的关键。而pip作为Python官方的包管理工具&#xff0c;承担着安装、卸载、升级和管理库的重要职责。本文将全面解析pip的核心命令&#xff0c;结合实例演示用法&#…...

【python】windows修改 pip 默认安装路径

在 Windows 系统 下&#xff0c;希望修改 pip 默认安装路径&#xff0c;结合你前面贴的图片和信息&#xff0c;一个 推荐做法&#xff08;不修改 site.py&#xff09;的完整教程。 目标&#xff1a;让 pip 安装包默认装到你指定的路径&#xff08;如 D:\MyPythonLibs&#xff…...

Python函数——万字详解

—— 小 峰 编 程 导 语&#xff1a; 从今天开始&#xff0c;我们将进入第二模块的学习——函数。第一模块主要是学习python基础知识&#xff0c;从第二模块开始就可以通过程序去解决工作中实际的问题。从今天开始&#xff0c;我们将进入第二模块的学习&#xff0c;此模块…...

es在已有历史数据的文档新增加字段操作

新增字段设置默认值 场景 在已经有大量数据的索引文档上&#xff0c;增加新字段 技术实现 一.更新索引映射 通过PUT请求显式定义新字段类型&#xff0c;确保后续写入的文档能被正确解析 PUT /文档名/_mapping {"properties": {"字段名1": {"type…...

LeetCode 35 搜索插入位置题解

LeetCode 35 搜索插入位置题解 题目描述 题目链接 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置&#xff08;需保证数组仍然有序&#xff09;。要求时间复杂度为 O(log n)。…...

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官网通信模式1.Simplest(简单)模式1.1 发送端1.2 接收端 0.RabbitMQ官网通信模式 1.Simplest(简单)模式 1.1 发送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple简单模…...

游戏开发实战(一):Python复刻「崩坏星穹铁道」嗷呜嗷呜事务所---源码级解析该小游戏背后的算法与设计模式【纯原创】

文章目录 奇美拉项目游戏规则奇美拉(Chimeras)档案领队成员 结果展示&#xff1a; 奇美拉项目 由于项目工程较大&#xff0c;并且我打算把我的思考过程和实现过程中踩过的坑都分享一下&#xff0c;因此会分3-4篇博文详细讲解本项目。本文首先介绍下游戏规则并给出奇美拉档案。…...

力扣热题100之删除链表的倒数第N个节点

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 代码 方法一 将链表中的值放入列表中&#xff0c;然后删除倒数第n个值&#xff0c;再将剩下的数依次转化为链表 # Definition for singly-linked list. # class ListNode: # …...

OCframework编译Swift

建一个OC的framework&#xff1a; 需要对外暴露的OC文件&#xff0c;需要放到OC的.h文件中 framework中&#xff0c;OC类&#xff0c;调用framework中的Swift类&#xff1a; #import "WowAudioFocus/WowAudioFocus-Swift.h" //02 #import "{工程名}/{工程…...

【AI News | 20250519】每日AI进展

AI Repos 1、deepdrone DeepDrone是一款基于smolagents框架的无人机聊天代理&#xff0c;集成DroneKit实现无人机分析与操作。用户可通过自然语言聊天与无人机助手交互&#xff0c;实现飞行路径和传感器数据可视化、基于飞行时长的维护建议、任务规划以及真实的无人机控制&…...

分布式ID生成系统

代码地址: github mid 简介 分布式 ID 生成系统是一个高性能、可靠的 ID 生成服务,支持两种模式:Snowflake(基于时间戳的内存生成)和 Segment(基于 MySQL 的号段分配)。系统采用双 Buffer 策略优化性能,集成 Prometheus 监控和 Zap 结构化日志,确保高可用性和可观测性…...

MAC常用操作整理

音量方法&#xff1a; 电脑键盘的右上角就有静音和不静音的按钮&#xff0c;还有调节音量的按钮&#xff0c;调节屏幕亮度的按钮 切换输入法方法&#xff1a; 1.大写按键&#xff0c;2.function按键(fn), 3.control 空格键, 选择上一个输入法&#xff0c;4.controloption空格…...

【Canvas与图标】圆角方块蓝星CSS图标

【成图】 120*120的png图标 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角方块蓝星CSS Draft1</…...

易境通散货拼柜系统:提高货代企业货物配载效率

在国际物流代理运输领域&#xff0c;货物配载是整个供应链的核心环节&#xff0c;其优化对于提升整个供应链的效率至关重要。传统的配载管理方式往往依赖人工操作&#xff0c;不仅效率低下&#xff0c;还容易出现错误。面对多订单、多货主、多目的地的复杂场景&#xff0c;传统…...

[Spring Boot]整合Java Mail实现Outlook发送邮件

日常开发过程中,我们经常需要使用到邮件发送任务,比方说验证码的发送、日常信息的通知等。日常比较常用的邮件发送方包括:163、QQ等,本文主要讲解Outlook SMTP的开启方式、OutLook STARTTTL的配置、如何通过JavaMail来实现电子邮件的发送等。 Outlook作为微软提供的企业电子…...

【盈达科技】GEO优化实战策略

提升内容在生成式引擎中的可见性&#xff1a;实战策略 随着生成式引擎&#xff08;Generative Engines, GEs&#xff09;的兴起&#xff0c;内容创作者面临着新的挑战和机遇。这些引擎通过整合和总结多源信息来提供精准且个性化的回答&#xff0c;正在迅速取代传统搜索引擎。为…...

HTTP 协议基础

本篇文章会从如下角度介绍 HTTP 协议&#xff1a; 原理与工作机制请求方法与状态码Header 与 Body 1、原理与工作机制 1.1 HTTP 是什么 HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;"超"表示扩展而非超级&#xff0c;即可以链接到其他文本…...

ros运行包,Ubuntu20.04成功运行LIO-SAM

zz:~/lio_sam_ws$ source devel/setup.bash zz:~/lio_sam_ws$ roslaunch lio_sam run.launch 创建包链接&#xff1a; 链接1&#xff1a;Ubuntu20.04成功运行LIO-SAM_ubuntu20.04运行liosam-CSDN博客 链接2&#xff1a;ubuntu 20.04 ROS 编译和运行 lio-sam,并且导出PCD文件…...

Linux《自主Shell命令行解释器》

在上一篇的进程控制当中我们已经了解了进程退出、进程等待以及进程替换的相关概念&#xff0c;那么在了解了这些的概念之后接下来在本篇当中我们就可以结合之前我们学习的知识来实现一个自主的Shell命令行解释器&#xff0c;通过Shell的实现能让我们进一步的理解操作系统当中的…...

设置IDEA打开新项目使用JDK17

由于最近在学习Spring-AI&#xff0c;所以JDK8已经不适用了&#xff0c;但是每次创建新项目都还是JDK8&#xff0c;每次调来调去很麻烦 把Projects和SDKs都调整为JDK17即可 同时&#xff0c;Maven也要做些更改&#xff0c;主要是添加build标签 <build><plugins>&…...

Vue百日学习计划Day36-42天详细计划-Gemini版

总目标: 在 Day 36-42 理解组件化开发的思想&#xff0c;熟练掌握 Vue 组件的注册、Props、Events、v-model、Slots、Provide/Inject 等核心概念和实践&#xff0c;能够构建可复用和易于维护的组件结构。 所需资源: Vue 3 官方文档 (组件基础): https://cn.vuejs.org/guide/es…...

Python对JSON数据操作

在Python中&#xff0c;对JSON数据进行增删改查及加载保存操作&#xff0c;主要通过内置的json模块实现。 一、基础操作 1. 加载JSON数据 • 从文件加载 使用json.load()读取JSON文件并转换为Python对象&#xff08;字典/列表&#xff09;&#xff1a; import json with open…...