【JVM原理详解】60-云原生JVM-Quarkus与Micronaut与CRIU
云原生 JVM — Quarkus 与 Micronaut 与 CRIU引言前两篇我们看了 GraalVM 的 AOT 编译和 JVM 语言生态。在云原生时代JVM 面临一个尴尬处境容器按秒计费、Pod 按需伸缩、函数按请求冷启动而传统 Spring Boot 应用启动要 2-5 秒、内存 300-800 MB、容器镜像 500 MB——这在 Kubernetes 弹性伸缩和 Serverless 场景下是难以接受的。这个问题有两条解决路径一是从框架层改造把运行时才做的工作提前到构建时减少启动开销代表是 Quarkus 和 Micronaut二是从运行时层改造用容器快照或类数据共享跳过 JVM 预热代表是 CRIU 和 CDS。本篇深入这三项技术的原理、对比和实践并给出 Spring Boot vs Quarkus vs Micronaut 的选型建议。云原生对 JVM 的挑战三大痛点传统 JVM 应用在云原生的痛点 ┌──────────────────────────────────────────────────┐ │ 痛点 传统JVM 云原生要求 │ ├──────────────────────────────────────────────────┤ │ 启动时间 2-5 秒 1 秒理想100ms │ │ 内存占用 300-800 MB 200 MB │ │ 镜像大小 500 MB 150 MB │ │ 首请求延迟 需预热 首请求即峰值 │ └──────────────────────────────────────────────────┘ 根因分析 1. 类加载Spring Boot 扫描 classpath加载数千个类 2. 依赖注入运行时反射创建 Bean、解析依赖图 3. JIT 预热解释执行 → C1 → C2 逐层优化需数千次调用 4. 框架初始化自动配置、条件装配、AOP 代理生成Kubernetes 的弹性伸缩加剧了这些问题流量洪峰到来时 HPAHorizontal Pod Autoscaler扩容新 Pod新 Pod 需要数十秒才能就绪错过流量高峰Serverless 平台AWS Lambda、Knative的冷启动超时通常只有几秒传统 JVM 应用经常超时。两条解决路径路径一框架层改造构建时优化 Quarkus → build-time 处理 Native Image Micronaut → 编译时依赖注入 AOP 路径二运行时层改造启动加速 CRIU → 容器快照恢复跳过 JVM 启动 CDS → 类数据共享减少类加载开销 AppCDS → 应用类共享进一步加速QuarkusSupersonic Subatomic JavaQuarkus 由 Red Hat 开发号称 “Supersonic Subatomic Java”超音速亚原子 Java。它的核心思路是把尽可能多的工作从运行时提前到构建时。构建时处理传统框架如 Spring Boot在启动时做大量工作扫描 classpath、解析注解、创建 Bean、生成代理。Quarkus 把这些工作移到构建时Quarkus 构建时 vs 运行时 传统框架启动流程运行时 1. JVM 启动加载类 2. 扫描 classpath反射 3. 解析注解反射 4. 构建 Bean 依赖图 5. 创建 Bean 实例反射 6. 生成 AOP 代理字节码生成 7. 就绪 耗时2-5 秒 Quarkus 启动流程构建时已做完 2-6 构建时 1. 扫描 classpath 2. 解析注解 3. 生成 Bean 创建代码直接 new无反射 4. 生成 AOP 代理代码 5. 生成启动引导索引 运行时 1. JVM 启动 2. 执行预生成的直接代码无反射 3. 就绪 耗时0.05-0.5 秒Quarkus 的两种模式Quarkus 支持两种运行模式# 模式一JVM 模式快速开发正常部署./mvnw packagejava-jartarget/quarkus-app/quarkus-run.jar# 启动约 0.7 秒内存约 150 MB# 模式二Native Image 模式极致启动和内存./mvnw package-Pnative./target/myapp-runner# 启动约 0.05 秒内存约 50 MB代码示例// Quarkus 应用示例// 适用 JDK 17Quarkus 3.xPath(/users)ApplicationScopedpublicclassUserResource{InjectUserRepositoryrepository;// 构建时注入运行时直接调用GETProduces(MediaType.APPLICATION_JSON)publicListUserlist(){returnrepository.findAll();}GETPath(/{id})publicUserget(PathParamLongid){returnrepository.findById(id);}POSTTransactionalpublicResponsecreate(Useruser){repository.persist(user);returnResponse.created(URI.create(/users/user.id)).build();}}// Panache 实体简化 ActiveRecord 风格的 ORMEntitypublicclassUserextendsPanacheEntity{publicStringname;publicintage;// 静态查询方法构建时生成实现publicstaticUserfindByName(Stringname){returnfind(name,name).firstResult();}}Quarkus 的关键设计是Extension扩展机制每个集成Hibernate、RESTEasy、Kafka 等以 Quarkus Extension 形式提供Extension 在构建时处理自己的注解和配置生成直接的调用代码。这意味着只有支持 Quarkus Extension 的库才能获得构建时优化——直接用传统 Spring 库不会享受到优化。Micronaut编译时依赖注入Micronaut 由 ObjectBay后独立为 Micronaut Foundation开发2018 年首发。它的核心设计是编译时依赖注入和 AOP彻底消除运行时反射。编译时 DI 的原理Micronaut 编译时 DI 流程 源码编译阶段 1. 注解处理器APT扫描 Inject / Singleton 等 2. 为每个 Bean 生成 BeanDefinition 类直接 new无反射 3. 为每个 AOP 切面生成代理类 4. 生成依赖注入的装配代码 生成的代码示例概念 // 源码 Singleton class UserService { Inject UserRepo repo; } // 编译时生成 class UserService$BeanDefinition { UserService instantiate(BeanContext ctx) { UserService bean new UserService(); // 直接 new bean.repo ctx.getBean(UserRepo.class); // 直接查找 return bean; } } 运行时 启动 → 读取 BeanDefinition → 直接执行装配代码 → 就绪 无反射、无类路径扫描、无代理字节码生成代码示例// Micronaut 应用示例// 适用 JDK 17Micronaut 4.xSingletonpublicclassUserService{privatefinalUserRepositoryrepository;// 构造器注入编译时解析推荐InjectpublicUserService(UserRepositoryrepository){this.repositoryrepository;}publicListUserfindAll(){returnrepository.findAll();}}Controller(/users)publicclassUserController{InjectUserServiceuserService;GetpublicListUserlist(){returnuserService.findAll();}Get(/{id})publicUserget(PathVariableLongid){returnuserService.findById(id);}}// Micronaut Data 编译时生成查询实现RepositorypublicinterfaceUserRepositoryextendsCrudRepositoryUser,Long{// 编译时生成实现运行时无反射ListUserfindByName(Stringname);Query(SELECT * FROM users WHERE age :age)ListUserfindByAgeGreaterThan(intage);}Micronaut Data 是亮点特性Repository 接口在编译时由注解处理器生成完整的 SQL 查询和映射实现运行时无反射、无代理。这与 Spring Data JPA 的运行时代理生成形成对比。Micronaut 的 AOT 与 Native ImageMicronaut 从设计之初就为 AOT 和 Native Image 优化# Micronaut Native Image 构建./mvnw package-Dpackagingnative-image ./target/myapp# 启动约 0.03 秒内存约 40 MB由于编译时已完成所有依赖注入和 AOP 处理Micronaut 的 Native Image 构建比传统 Spring 应用简单得多——几乎不需要额外的反射配置。CRIU容器快照恢复CRIUCheckpoint/Restore In Userspace是 Linux 的一个工具能冻结正在运行的进程并保存其状态到磁盘之后从磁盘恢复进程继续运行。这为 JVM 冷启动问题提供了一个完全不同的思路。CRIU 工作原理CRIU 加速 JVM 启动 传统 JVM 冷启动 JVM 进程启动 → 类加载 → JIT 预热 → 应用就绪 耗时5-30 秒取决于应用复杂度 CRIU 快照恢复 阶段一准备快照离线只做一次 1. 启动 JVM 应用 2. 执行预热发送请求触发 JIT 编译 3. 等待应用达到稳态JIT 充分优化 4. CRIU checkpoint冻结进程保存内存/寄存器/文件描述符到镜像 阶段二快照恢复在线每次冷启动 1. CRIU restore从镜像恢复进程 2. 进程直接从冻结点继续运行 3. 已编译的 JIT 代码、已加载的类、已初始化的堆全部恢复 耗时0.1-2 秒取决于堆大小# CRIU 基本操作# 冻结进程PID 12345并保存状态criu dump-t12345--images-dir /checkpoint# 从快照恢复进程criu restore --images-dir /checkpointCRIU 与容器结合在 Kubernetes 中CRIU 可用于容器快照Kubernetes CRIU 流程 1. 构建阶段 启动容器 → 预热 JVM → criu dump → 保存容器快照到镜像层 2. 扩容阶段 kubelet 拉起新容器 → criu restore → 应用立即就绪 跳过 JVM 启动 类加载 JIT 预热实际限制CRIU 恢复要求运行环境与快照环境一致内核版本、CPU 架构、文件系统路径且恢复的 JVM 会丢失网络连接需要重连。这些限制让 CRIU 在通用场景推广困难但在特定平台如 AWS Firecracker、Azure 的容器快照功能中已有应用。与 Project CRaC 的结合Project CRaCCoordinated Restore at Checkpoint是 OpenJDK 的一个项目专门为 CRIU 场景优化 JVM。它提供 Java API 让应用感知 checkpoint/restore 事件// CRaC API 示例JDK with CRaCpublicclassMyAppimplementsjdk.crac.Resource{OverridepublicvoidbeforeCheckpoint(Context?extendsResourcecontext){// 快照前关闭网络连接、刷新缓冲区closeConnections();}OverridepublicvoidafterRestore(Context?extendsResourcecontext){// 恢复后重新建立连接reconnect();}publicvoidstart(){// 注册为 CRaC 资源jdk.crac.Context.global().register(this);// 正常业务逻辑runServer();}}CRaC 让 JVM 配合 CRIU 处理好网络、文件描述符等需要重连的资源使快照恢复更可靠。Azul Zulu JDK 和 OpenJDK CRaC 构建版已支持。CDS 与 AppCDS 优化CDSClass Data Sharing是 HotSpot 内置的启动加速技术原理是把类的元数据InstanceKlass预先处理成共享归档文件启动时直接内存映射跳过类的解析和验证。CDS 工作流程 传统类加载 .class 文件 → 读取 → 解析 → 验证 → 准备 → InstanceKlass 每个类都要走一遍启动时加载数千个类 CDS 模式 构建时一次 java -Xshare:dump # 生成 classes.jsa 共享归档 运行时每次启动 内存映射 classes.jsa → 直接获得 InstanceKlass 跳过解析/验证步骤多 JVM 进程共享同一份内存CDS 的演进版本特性共享范围JDK 5CDS 引入仅 JDK 核心类rt.jarJDK 10AppCDS应用类共享JDK 类 应用类JDK 12默认生成 CDS 归档安装时自动生成JDK 13Archivable 类扩展支持归档更多类# AppCDS 使用流程JDK 11# 步骤一生成类列表java-Xshare:off-XX:DumpLoadedClassListapp.classlist\-jarmyapp.jar# 步骤二生成共享归档java-Xshare:dump-XX:SharedClassListFileapp.classlist\-XX:SharedArchiveFileapp.jsa\-jarmyapp.jar# 步骤三使用归档启动java-Xshare:on-XX:SharedArchiveFileapp.jsa\-jarmyapp.jar# 启动时间减少 20-40%CDS 的效果与局限CDS 主要优化类加载阶段对 JIT 预热无帮助。对于类加载占比高的应用如 Spring BootCDS 能减少 20-40% 的启动时间但对计算密集型应用效果有限。CDS 的优势是无需修改代码、无需 Native Image 构建的复杂配置是最低成本的启动加速方案。JDK 12 默认开启 CDS使用 JDK 内置归档开启 AppCDS 只需额外几步配置。三方对比Spring Boot vs Quarkus vs Micronaut维度Spring Boot 3QuarkusMicronaut开发方VMware/BroadcomRed HatMicronaut FoundationDI 机制运行时反射构建时处理编译时 APT启动时间JVM2-5 秒0.7-1.5 秒0.8-1.5 秒启动时间Native0.05-0.1 秒0.02-0.05 秒0.02-0.05 秒内存JVM300-800 MB150-300 MB150-300 MB内存Native50-150 MB30-80 MB30-80 MB镜像大小Native80-120 MB50-80 MB50-80 MB峰值吞吐最高生态成熟高高Native Image 支持Spring AOT原生设计原生设计生态丰富度极高中高Extension中需 Micronaut 适配学习成本低Java 开发者熟悉中中热重载Spring DevToolsLive Reload快热重载支持Data 访问Spring Data JPAHibernate/PanacheMicronaut Data适用场景企业级应用、传统微服务云原生、Serverless云原生、Serverless选型建议选型决策树 是否云原生 / Serverless 场景 ├── 否 → Spring Boot生态成熟、人才多 └── 是 │ 是否需要极致启动和内存 ├── 是Serverless/FaaS │ │ │ 团队是否接受 Kotlin/Groovy 生态 │ ├── 是 → Micronaut编译时 DI 更干净 │ └── 否 → QuarkusJava 生态更贴近 │ └── 否K8s 常驻服务 │ 是否愿意引入新框架 ├── 是 → Quarkus / MicronautJVM 模式也快 └── 否 → Spring Boot 3 CDS最低改造成本实践要点Quarkus 实践Extension 优先只使用有 Quarkus Extension 的库。直接引入传统 Spring 库会退化为运行时反射失去 Quarkus 优势。开发模式./mvnw quarkus:dev提供秒级热重载和优雅的调试体验比 Spring DevTools 更快。Native Image 构建需要 GraalVM 环境构建时间 5-15 分钟。建议在 CI 中用专用构建容器。配置简化Quarkus 用application.properties统一配置支持ConfigMapping类型安全配置。Micronaut 实践构造器注入Micronaut 推荐构造器注入Inject标在构造器上编译时生成更干净的装配代码。Micronaut Data用 Micronaut Data 替代 Spring Data JPA编译时生成查询实现Native Image 友好。AOP 限制Micronaut 的 AOP 在编译时处理不支持运行时动态织入。需要动态代理的场景需额外处理。Bean 作用域Micronaut 的作用域Singleton、Prototype与 Spring 类似但语义在编译时确定。CRIU / CRaC 实践环境一致性快照和恢复环境必须一致内核版本、CPU 架构。跨节点恢复需用相同基础镜像。资源处理网络连接、文件描述符、定时任务在 checkpoint 前需处理。使用 CRaC API 注册资源回调。堆大小权衡CRIU 快照包含整个堆大堆恢复慢。建议快照前触发一次 GC 减小堆体积。JDK 选择使用 Azul Zulu CRaC 版或 OpenJDK CRaC 构建标准 OpenJDK 不支持 CRaC API。CDS 实践最低成本加速CDS 是唯一无需改代码、无需新框架的启动加速方案Spring Boot 应用建议首先尝试。容器中的 CDS在 Dockerfile 中生成归档文件打包到镜像。注意归档文件路径在容器内外一致。与 Native Image 互补CDS 优化 JVM 模式启动Native Image 是更激进的方案。两者不冲突按场景选择。归档更新依赖升级后需重新生成归档。在 CI 中加入归档生成步骤。小结云原生挑战JVM 启动慢、内存大、镜像大与容器秒级伸缩和 Serverless 冷启动要求冲突。根因是运行时类加载、反射 DI、JIT 预热。QuarkusRed Hat 出品构建时处理注解和 DI生成直接调用代码。支持 JVM 模式和 Native Image 模式Extension 机制保证生态库也享受构建时优化。Micronaut编译时依赖注入APT 生成 BeanDefinition和编译时 AOP运行时零反射。Micronaut Data 编译时生成查询实现Native Image 友好。CRIU CRaC容器快照恢复跳过 JVM 启动和 JIT 预热。CRaC 提供 Java API 处理 checkpoint/restore 的资源管理。限制是环境一致性要求高。CDS/AppCDSHotSpot 内置的类数据共享内存映射共享归档跳过类解析验证。无需改代码启动加速 20-40%最低成本的优化方案。选型核心传统企业应用选 Spring Boot CDS云原生常驻服务选 Quarkus/MicronautJVM 模式Serverless/FaaS 选 Quarkus/MicronautNative Image 模式特定平台可探索 CRIU/CRaC。下一篇我们展望 JVM 的未来——Project Lilliput 如何缩小对象头、Project Leyden 如何用 AOT 解决冷启动、Valhalla/Babylon/Amber 将带来什么变革。

相关新闻

从深夜黑屏到满帧畅玩:我的Ryujinx模拟器调教手记

从深夜黑屏到满帧畅玩:我的Ryujinx模拟器调教手记

从深夜黑屏到满帧畅玩:我的Ryujinx模拟器调教手记 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 深夜十一点,我双击了桌面上的Ryujinx模拟器,把期待…

2026/8/18 23:51:31 阅读更多 →
Ryujinx 完整上手路线图:免费开源 Switch 模拟器在 PC 上从零跑通的实用手记

Ryujinx 完整上手路线图:免费开源 Switch 模拟器在 PC 上从零跑通的实用手记

Ryujinx 完整上手路线图:免费开源 Switch 模拟器在 PC 上从零跑通的实用手记 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想玩《塞尔达传说:旷野之息》却不想…

2026/8/18 23:51:31 阅读更多 →
Ryujinx性能优化完全手册:从首次启动到流畅运行的8个实战技巧

Ryujinx性能优化完全手册:从首次启动到流畅运行的8个实战技巧

Ryujinx性能优化完全手册:从首次启动到流畅运行的8个实战技巧 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上流畅运行Nintendo Switch游戏?开源模拟…

2026/8/17 21:16:24 阅读更多 →

最新新闻

Windows SQL Server 彻底卸载指南:从标准流程到深度清理

Windows SQL Server 彻底卸载指南:从标准流程到深度清理

1. 项目概述:为什么“卸载干净”是个技术活? 在数据库运维和开发领域,处理Windows上的SQL Server,尤其是其卸载过程,远比你想象的要复杂。这绝不是一个简单的“控制面板-卸载程序”就能搞定的事情。我见过太多同行&…

2026/8/18 23:51:24 阅读更多 →
高效管理无标题创意碎片的技术方案

高效管理无标题创意碎片的技术方案

1. 项目概述 作为一名从业多年的技术博主,我经常遇到一个困扰:当灵感突然来临时,却因为各种原因没能及时记录下完整的项目构思。这种情况相信很多创作者都深有体会。今天我想分享一个实用的解决方案 - 如何高效管理那些"无标题"的创…

2026/8/18 23:51:24 阅读更多 →
AI智能体对话真实感评估:MiroBench基准的四个维度与技术实现

AI智能体对话真实感评估:MiroBench基准的四个维度与技术实现

1. 从“对话”到“仿真”:为什么我们需要一个“真实感”的基准?最近几年,AI智能体(Agent)的研究和应用热度持续攀升。从能自主完成任务的AutoGPT,到能模拟复杂社会互动的多智能体系统,我们似乎正…

2026/8/18 23:51:24 阅读更多 →
Wand-Enhancer 使用指南:如何快速解锁 Wand 专业版并搭建手机远程控制台

Wand-Enhancer 使用指南:如何快速解锁 Wand 专业版并搭建手机远程控制台

Wand-Enhancer 使用指南:如何快速解锁 Wand 专业版并搭建手机远程控制台 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer…

2026/8/18 23:51:24 阅读更多 →
LLM智能体上下文管理:Self-GC机制实现长周期任务高效运行

LLM智能体上下文管理:Self-GC机制实现长周期任务高效运行

1. 项目概述:当LLM智能体学会“自我清理” 最近在折腾长周期任务的LLM智能体时,我遇到了一个几乎所有同行都会头疼的问题:上下文爆炸。你给智能体设定一个目标,比如“开发一个完整的Web应用”,它开始规划、写代码、调试…

2026/8/18 23:51:24 阅读更多 →
VFEAgent:多模态AI智能体如何实现工程仿真全流程自动化

VFEAgent:多模态AI智能体如何实现工程仿真全流程自动化

1. 项目概述:当AI智能体遇上工程仿真 最近在工程仿真圈子里,一个概念正被频繁讨论:能否让AI像一位经验丰富的工程师一样,从一张设计草图甚至一段自然语言描述开始,自动完成从几何处理、网格划分、物理场设置、求解到后…

2026/8/18 23:50:24 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →