比 JDK 最高快 170 倍,蚂蚁集团开源高性能多语言序列化框架 Fury

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

4b3ef6296f258ba6b49057b459632bcb.gif

文|杨朝坤(慕白)

蚂蚁集团技术专家

Fury 框架作者

2018 年加入蚂蚁集团,先后从事流计算框架、在线学习框架、科学计算框架和 Ray 等分布式计算框架开发,对批计算、流计算、Tensor 计算、高性能计算、AI 框架、张量编译等有深入的理解。

本文 4509 字    阅读 15 分钟

Fury 是一个基于 JIT 动态编译和零拷贝的多语言序列化框架,支持 Java/Python/Golang/JavaScript/C++ 等语言,提供全自动的对象多语言/跨语言序列化能力,和相比 JDK 最高 170 倍的性能。  

代码主仓库的 GitHub 地址为:https://github.com/alipay/fury

91ebacfab4f875956df846ea9249db74.png

 背景

序列化是系统通信的基础组件,在大数据、AI 框架和云原生等分布式系统中广泛使用。当对象需要跨进程、跨语言、跨节点传输、持久化、状态读写、复制时,都需要进行序列化,其性能和易用性影响运行效率和开发效率。

静态序列化框架 ProtoBuf/FlatBuffer/Thrift 由于不支持对象引用和多态、需要提前生成代码等原因,无法作为领域对象直接面向应用进行跨语言开发。而动态序列化框架 JDK 序列化/Kryo/Fst/Hessian/Pickle 等,尽管提供了易用性和动态性,但不支持跨语言,且性能存在显著不足,并不能满足高吞吐、低延迟和大规模数据传输场景需求。

因此,我们开发了一个新的多语言序列化框架 Fury,并正式在 GitHub 开源。通过一套高度优化的序列化基础原语,结合 JIT 动态编译和 Zero-Copy 等技术,同时满足了性能、功能和易用性的需求,实现了任意对象自动跨语言序列化,并提供极致的性能。

7e742b6594b4cfc9ac68fc7e13866fc4.jpeg

Fury 简介

Fury 是一个基于 JIT 动态编译和零拷贝的多语言序列化框架,提供极致的性能和易用性:

  • 支持主流编程语言 Java/Python/C++/Golang/JavaScript,其它语言可轻易扩展;

  • 统一的多语言序列化核心能力:

  • 高度优化的序列化原语;

  • Zero-Copy 序列化支持,支持 Out-of-Band 序列化协议,支持堆外内存读写;

  • 基于 JIT 动态编译技术在运行时异步多线程自动生成序列化代码优化性能,增加方法内联、代码缓存和消除死代码,减少虚方法调用/条件分支/Hash 查找/元数据写入/内存读写等,提供相比别的序列化框架最高 170 倍的性能;

  • 多协议支持:兼顾动态序列化的灵活性和易用性,以及静态序列化的跨语言能力:

  • Java 序列化:

  • 无缝替代 JDK/Kryo/Hessian,无需修改任何代码,但提供最高 170x 的性能,可以大幅提升高性能场景 RPC 调用、数据传输和对象持久化效率;

  • 100% 兼容 JDK 序列化,原生支持 JDK 自定义序列化方法 writeObject/readObject/writeReplace/readResolve/readObjectNoData;

  • 跨语言对象图序列化:

  • 多语言/跨语言自动序列化任意对象,无需创建 IDL 文件、手动编译 Schema 生成代码以及将对象转换为中间格式;

  • 多语言/跨语言自动序列化共享引用和循环引用,不需要关心数据重复或者递归错误;

  • 支持对象类型多态,多个子类型对象可以同时被序列化;

  • 行存序列化:

  • 提供缓存友好的二进制随机访问行存格式,支持跳过序列化和部分序列化,适合高性能计算和大规模数据传输场景;

  • 支持和 Arrow 列存自动互转。

序列化核心能力

尽管不同的场景对序列化有需求,但序列化的底层操作都是类似的。因此 Fury 定义和实现了一套序列化的基础能力,基于这套能力能够快速构建不同的多语言序列化协议,并通过编译加速等优化具备高性能。同时针对一种协议在基础能力上的性能优化,也能够让所有的序列化协议都受益。

序列化原语

序列化涉及的常见操作主要包括:

  • Bitmap 位操作

  • 整数编解码

  • 整数压缩

  • 字符串创建*拷贝优化

  • 字符串编码:ASCII/UTF8/UTF16

  • 内存拷贝优化

  • 数组拷贝压缩优化

  • 元数据编码&压缩&缓存

Fury 针对这些操作在每种语言内部都做了大量的优化,结合 SIMD 指令和语言高级特性,将性能推到极致,从而方便不同协议使用。

零拷贝序列化

在大规模数据传输场景,一个对象图内部往往有多个 binary buffer,而序列化框架在序列化过程当中会把这些数据写入一个中间 buffer,引入多次耗时内存拷贝。Fury 借鉴了 Pickle5、Ray 以及 Arrow 的零拷贝设计,实现了一套 Out-of-Band 序列化协议,能够把一个对象图当中的所有 binary buffer 直接抓取出来,避免掉这些 buffer 的中间拷贝,将序列化期间的内存拷贝开销降低到 0。

下图是 Fury 关闭引用支持时 Zero-Copy 的大致序列化过程。

0ecc76fb1de5c51674fd2dfab9ff23ce.png

目前 Fury 内置了以下类型的 Zero-Copy 支持:

  • Java:所有基本类型数组、ByteBuffer、ArrowRecordBatch、VectorSchemaRoot

  • Python:array 模块的所有 array、numpy 数组、PyArrow.Table、PyArrow.RecordBatch

  • Golang:byte slice

用户也可以基于 Fury 的接口扩展新的零拷贝类型。

JIT 动态编译器

对于要序列化的自定义类型对象,其中通常包含大量类型信息,Fury 利用这些类型信息在运行时直接生成高效的序列化代码,将大量运行时的操作在动态编译阶段完成,从而增加方法内联和代码缓存,减少虚方法调用/条件分支/Hash 查找/元数据写入/内存读写等,最终大幅加速了序列化性能。

对于 Java 语言,Fury 实现了一套运行时代码生成框架,定义了一套序列化逻辑的算子表达式 IR,在运行时基于对象类型的泛型信息进行类型推断,然后构建 一棵描述序列化代码逻辑的表达式树,根据表达式树生成高效的 Java 代码,再在运行时通过 Janino 编译成字节码,再加载到用户的 ClassLoader 里面或者 Fury 创建的 ClassLoader 里面,最终通过 Java JIT 编译成高效的汇编代码。

由于 JVM JIT 会跳过大方法编译和内联,Fury 也实现了一套优化器,将大方法递归拆分成小方法,这样就保证了 Fury 生成的所有代码都可以被编译和内联,压榨 JVM 的性能到极致。

268f0c2b85b9a1b804a73580588b3626.png

同时 Fury 也支持异步多线程动态编译,将不同序列化器的代码生成任务提交到线程池执行,在编译完成之前使用解释模式执行,从而保证不会出现序列化毛刺,不需要提前预热所有类型的序列化。

Python 和 JavaScript 场景也是采用的类似代码生成方式,这样的生成方式开发门槛低,更容易排查问题。

由于序列化需要密切操作每种编程语言的对象,而编程语言并没有暴露内存模型的低阶 API,通过 Native 方法调用存在较大开销,因此我们并不能通过 LLVM 构建一个统一的序列化器 JIT 框架,而是需要在每种语言内部结合语言特性实现特定的代码生成框架以及序列化器构建逻辑。

静态代码生成

尽管 JIT 编译能够大幅提升序列化效率,并且在运行时能够根据数据的统计分布重新生成更优的序列化代码,但 C++/ Rust 等语言不支持反射,没有虚拟机,也没有提供内存模型的低阶 API,因此我们无法针对这类语言通过 JIT 动态编译生成序列化代码。

对于此类场景,Fury 正在实现一套 AOT 静态代码生成框架,在编译时根据对象的 Schema 提前生成序列化代码,然后使用生成的代码进行自动序列化。对于 Rust,未来也会通过 Rust 的 Macro 在编译时生成代码,提供更好的易用性。

缓存优化

在序列化自定义类型时,会把字段进行重排序,保证相同接口类型的字段依次序列化,增加缓存命中的概率,同时也促进了 CPU 指令缓存,实现了更加高效的序列化。对于基本类型字段将写入顺序按照字节字段大小降序排列,这样如果开始地址是对齐的,随后的读写都会发生在内存地址对齐的位置,CPU 执行起来更加高效。

多协议设计与实践

基于 Fury 提供的多语言序列化核心能力,我们在这之上构建了三种序列化协议,分别适用于不同的场景:

  • Java 序列化:适合纯 Java 序列化场景,提供最高百倍以上的性能提升;

  • 跨语言对象图序列化:适合面向应用的多语言编程,以及高性能跨语言序列化;

  • 行存序列化:适合分布式计算引擎如 Spark/Flink/Dories/Velox/样本流处理框架/特征存储等。

后续我们也会针对一些核心场景添加新的协议,用户也可以基于 Fury 的序列化能力构建自己的协议。

Java 序列化

由于 Java 在大数据、云原生、微服务和企业级应用的广泛使用,对 Java 序列化的性能优化可以大幅降低系统延迟,提升吞吐率,降低服务器成本。

因此 Fury 针对 Java 序列化进行了大量极致性能优化,得以具备了以下能力:

  • 极致性能:通过利用 Java 对象的类型和泛型信息,结合 JIT 编译、Unsafe 低阶操作,Fury 相比 JDK 最高有 170 倍的性能提升,相比 Kryo/Hessian 最高有 50~100 倍的性能提升。

  • 100% JDK 序列化 API 兼容性:支持了所有 JDK 自定义序列化方法 writeObject/readObject/ writeReplace/readResolve/readObjectNoData 的语义,保证任意场景替换 JDK 序列化的正确性。而已有的 Java 序列化框架如 Kryo/Hessian 在这些场景,都存在一定的正确性问题。

  • 类型前后兼容:在反序列化端和序列化端 Class Schema 不一致时,仍然可以正确反序列化,支持应用独立升级部署,独立增删字段。并且我们对元数据进行了极致的压缩和共享,类型兼容模式相比类型强一致模式做到了几乎没有任何性能损失。

  • 元数据共享:在某个上下文 (TCP 连接)下多次序列化之间共享元数据(类名称、字段名称、Final 字段类型信息等),这些信息会在该上下文下第一次序列化时发送到对端,对端可以根据该类型信息重建相同的反序列化器,后续序列化可以避免传输元数据,减小网络流量压力,同时也自动支持类型前后兼容。

  • 零拷贝支持:支持 Out-of-Band 零拷贝和堆外内存读写。

跨语言对象序列化

跨语言对象图序列化主要用于对动态性和易用性有更高要求的场景。尽管 ProtoBuf/FlatBuffer 等框架提供了多语言序列化能力,但仍然存在一些不足:

  • 需要提前编写 IDL 并静态编译生成代码,不具备足够的动态性和灵活性;

  • 生成的类不符合面向对象设计也无法给类添加行为,并不能作为领域对象直接用于多语言应用开发;

  • 不支持子类序列化。面向对象编程的主要特点是通过接口调用子类方法。这类模式也无法得到很好的支持。尽管 FlatBuffer 提供了 Union,ProtoBuf 提供了 OneOf/Any 特性,这类特性需要在序列化和反序列化时判断对象的类型,不符合面向对象编程的设计;

  • 不支持循环和共享引用,需要针对领域对象重新定义一套 IDL 并自己实现引用解析,然后在每种语言里面编写代码实现领域对象和协议对象之间的相互转换,如果对象图嵌套层数较深,则需要编写更多的代码。

结合以上几点,Fury 实现了一套跨语言的对象图序列化协议:

  • 多语言/跨语言自动序列化任意对象:在序列化和反序列化端定义两个 Class,即可自动将一种语言的对象自动序列化为另一种语言的对象,无需创建 IDL 文件、编译 Schema 生成代码以及手写转换代码;

  • 多语言/跨语言自动序列化共享引用和循环引用;

  • 支持对象类型多态,符合面向对象编程范式,多个子类型对象可以同时被自动反序列化,无需用户手动处理;

  • 同时我们在这套协议上面也支持了 Out-of-Band 零拷贝。

自动跨语言序列化示例:

01c6211c3bf187f7687aab4dd5e8fdc5.png

行存序列化

对于高性能计算和大规模数据传输场景,数据序列化和传输往往是整个系统的性能瓶颈。如果用户只需要读取部分数据,或者根据对象某个字段进行过滤,反序列化整个数据将带来额外开销。因此 Fury 也提供了一套二进制数据结构,在二进制数据上直读直写,避开序列化。

Apache Arrow 是一个成熟的列存格式,支持二进制读写。但列存并不能满足所有场景需求,在线链路和流式计算场景的数据天然就是行存结构,同时列式计算引擎内部在涉及到数据变更和 Hash/Join/Aggregation 操作时,也会使用到行存结构。

而行存并没有一个统一标准实现,计算引擎如 Spark/Flink/Doris/Velox 等都定义了一套行存格式,这些格式不支持跨语言,且只能被自己引擎内部使用,无法用于其它框架。尽管 FlatBuffer 能够支持按需反序列化,但需要静态编译 Schema IDL 和管理 Offset,无法满足复杂场景的动态性和易用性需求。

因此 Fury 在早期借鉴了 Spark Tungsten 和 Apache Arrow 格式,实现了一套可以随机访问的二进制行存结构,目前实现了 Java/Python/C++ 版本,实现了在二进制数据上面直读直写,避免掉了所有序列化开销。

下图是 Fury Row Format 的二进制格式:

41e93a053735898b483925fadf824957.png

该格式密集存储,数据对齐,缓存友好,读写更快。由于避免了反序列化,能够减少 Java GC 压力。同时降低 Python 开销,同时由于 Python 的动态性,Fury 的数据结构实现了 _getattr__/getitem/slice/ 和其它特殊方法,保证了行为跟 Python dataclass/list/object 的一致性,用户没有任何感知。

性能对比

这里给出部分 Java 序列化性能数据,其中标题包含 compatible 的图表是支持类型前后兼容下的性能数据,标题不包含 compatible 的图表是不支持类型前后兼容下的性能数据。为了公平起见,所有测试 Fury 关闭了零拷贝特性。

更多 Benchmark 数据请参考 Fury Github 官方文档:https://github.com/alipay/fury/tree/main/docs/benchmarks

1ee1a4cfe4caa731bc1d887b781fb389.jpeg

e2a935a00e2fc2c17b140918a582da08.jpeg

0cb8d4b7dd06bb863e1bf6a5d4ea95ab.jpeg

未来规划

  • 元数据压缩和自动共享

  • 跨语言序列化支持类型前后兼容

  • 静态代码生成框架,用于提前生成 C++/Golang/Rust 代码

  • C++/Rust 支持跨语言对象图序列化

  • Golang/Rust/JavaScript 支持行存

  • 兼容 ProtoBuffer 生态,支持根据 Proto IDL 自动生成 Fury 序列化代码

  • 新的协议实现:AI 特征存储,知识图谱序列化

  • 持续改进我们的序列化基础原语,提供更高性能实现

  • 标准化协议,提供二进制兼容性

  • 文档和易用性改进

加入 Fury

Fury 致力于成为一个开放中立、追求极致与创新的社区项目,后续的研发与讨论等工作都会在社区以开源透明的方式进行。欢迎任何形式的参与,包括但不限于提问、代码贡献、技术讨论等。非常期待收到大家的想法和反馈,一起参与到项目的建设中来,推动项目向前发展,打造最先进的序列化框架。

了解更多…

Fury Star 一下✨:
https://github.com/alipay/fury

官方网站:https://furyio.org

欢迎各种 Issue、PR、Discussion。

也欢迎直接加入下面的官方交流群,参与 Fury 的交流。

微信公众号:

扫码加入钉钉交流群👇(群号:36170003000)

5b7d9bf71194210b48e051ae70b8a565.png

本周推荐阅读

9d4f53e0521733781da7c96730667f93.png

SOFABoot 4.0 正式发布,多项新特性等你来体验!

ddb4d2c4b8701247e7cb043b38fd87e1.png

生产环境可用的 Seata-go 1.2.0 来啦!!!

0473b97313a613d8c81ba70fccd1b4e2.png

MoE 系列[六] - Envoy Go 扩展之并发安全

c8e4bf993e3f99b1b2caa64d454d6d07.png

MOSN 基于延迟负载均衡算法—走得更快,期待走得更稳

0f40a2e95c35a5364b97335852b810ac.jpeg

MPC模型预测控制实战:从理论到代码实现(Python示例) 本文详细介绍了MPC模型预测控制的实战应用,从理论到Python代码实现。通过构建系统模型、预测方程、优化问题及约束处理,展示了如何实现一个完整的MPC控制器。文章还提供了水箱液位控制的应用案例,帮助读者掌握MPC在工业控制中的实际应用。 阅读详情

相关推荐

【Cubietruck】Qt5.8.0 x64、x86、armhf三个版本的编译安装

一、       Preparation 以下环境配置支持虚拟机和实体机,但是实体机生产效率会相对高一点,实体机编译Qt的速度是虚拟机两倍以上。 若使用虚拟机,推荐使用VirtualBox,开源免费,尽量不要使用Vmware破解版。   Download List   名称 链接 下载项目 OS https://mirro

beatfan的博客 3658

打破Spring的垄断,云原生Java框架Micronaut

Micronaut是一个创新性的、现代的、基于 JVM 的全堆栈云原生Java开发框架,旨在构建模块化、易于测试的 JVM 应用程序,支持 Java、Kotlin 和 Groovy 语言。与传统的Java框架相比,Micronaut具有卓越的性能和低延迟,并支持云原生开发模式。它通过提前进行依赖注入、AOT(Ahead of Time)编译和减少反射使用等技术手段,显著减少了应用程序的启动时间和内存占用。

5171

ROS实践(四)机器人SLAM建图(gmapping)

本文介绍了SLAM技术及其实现方法。SLAM(同步定位与地图构建)让机器人在未知环境中通过传感器数据自主定位并构建地图。文章详细讲解了激光雷达、RGBD相机等常用传感器,以及gmapping和map_server这两个ROS功能包的使用方法。重点阐述了SLAM建图实验步骤:配置gmapping节点参数、启动机器人仿真、运行gmapping节点、使用rviz可视化工具、通过键盘遥控机器人完成地图构建并保存。实验结果表明,该方法能有效实现机器人自主建图功能,为后续导航等应用奠定基础。

qq_1033275663的博客 4335

mysql存储过程写报表还是java写好_用存储过程和 JAVA 写报表数据源有什么弊端?...

我们在报表开发中经常会使用存储过程准备数据,存储过程支持分步计算,可以实现非常复杂的计算逻辑,为报表开发带来便利。所以,报表开发中这样的存储过程并不少见:3008 行,141KB 的存储过程,会给报表开发带来什么不好的影响?1. 编辑调试性存储过程难以编辑调试,这样几千行存储过程的开发周期往往要以周或月计,这样会严重影响报表的开发效率,而业务提的报表需求似乎都“很急”。2. 维护性相对开发的一次性...

weixin_39659837的博客 383

鸿蒙实战开发教程-注册登录页面

在密码输入框中,只要设置TextInput的类型就可以实现带眼睛logo的密码输入框效果:

2401_82546228的博客 3559

DataEase 未授权+远程代码执行漏洞复现(CVE-2025-49001、CVE-2025-49002)

DataEase 是一款开源的数据分析平台,提供丰富的数据可视化和分析功能,帮助用户轻松地进行数据探索和决策支持。近日,有关DataEase 被爆出多个漏洞,其中 CVE-2025-49001 是由于JWT校验机制错误导致攻击者可伪造JWT令牌绕过身份验证流程,CVE-2025-49002 是由于H2数据库模块没有严格过滤用户输入的JDBC连接参数,可使用大小写绕过补丁。攻击者可利用这些漏洞实现未授权代码执行,威胁用户数据和系统的安全。

李同學AI安全 1947

比JDK最高快170倍,蚂蚁集团开源高性能多语言序列化框架Fury

来源|公众号 InfoQ作者|杨朝坤(慕白)编辑|邓艳琴Fury 是一个基于 JIT 动态编译和零拷贝的多语言序列化框架,支持 Java/Python/Golang/JavaScript/C++ 等语言,提供全自动的对象多语言 / 跨语言序列化能力,和相比 JDK 最高 170 倍的性能。代码主仓库的 GitHub 地址为:https://github.com/alipay/fury ...

程序员小灰的博客 556

热力学仿真软件:ANSYS CFX_(15).旋转机械仿真

创建旋转域在中选择需要设置为旋转域的区域。选择选项。设置旋转速度在设置中,指定旋转速度(单位为弧度/秒)。也可以选择选项,并输入具体值。设置旋转轴在设置中,指定旋转轴的方向和位置。通常旋转轴的方向可以使用单位向量来表示,例如[0, 0, 1]表示沿Z轴旋转。旋转轴的位置可以通过指定一个点的坐标来确定,例如[0, 0, 0]表示旋转轴通过原点。旋转机械的仿真在ANSYS CFX中是一个复杂但重要的过程。

kkchenjj的博客 1159

全票通过!多语言序列化框架 Fury 正式加入 Apache 孵化器

Fury是一个基于JIT动态编译和零拷贝技术的多语言序列化框架,支持Java/Python/C++/JavaScript/Golang/ Scala/Rust等语言,提供最高170倍的性能和极致的易用性,可以大幅提升大数据计算、AI应用和微服务等系统的性能,降低服务间调用延迟,节省成本并提高用户体验;同时提供全新的多语言编程范式,解决现有的多语言序列化动态性不足的问题,显著降低多语言系统的研发成本,帮助业务快速迭代。杨朝坤,蚂蚁集团技术专家,花名慕白,Fury 框架作者。

chaokunyang的博客 1839

在ubuntu20.04中安装MATLAB时常见问题及解决方法

   如果你刚装完ubuntu20.04,这时你想要安装MATLAB2021A,在输入命令./install进行安装时,可能会报以下错误:    terminate called after throwing an instance of ‘JailContainerException’ what(): Error: 88: No JRE version parsed from/media/jzx/MATHWORKS_R2021A/sys /java/jre/glnxa64/jre/release   

慕羽★的博客 1万+

【SECS】初识SECS协议

项目标题的第一位和第二位告诉下面有多少字节表示项目的长度。而项目的长度是指项目标题后面的字节数,这里第一个字节就是项目标题。1个字节可以表示的最大长度是0-255,所以只要项目标题后面的字节数小于等于254,都是0x01。

weixin_48618536的博客 1643

Apache Fory 从 Apache 基金会毕业,正式成为顶级项目

Apache Fory 是一个基于 JIT 动态编译和零拷贝技术的多语言序列化框架,专为分布式系统和高性能计算场景设计,支持 Java/Python/JavaScript/Golang/ Scala/Kotlin/Rust 等语言。

DB_GPT的博客 1579

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 289

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 198

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 130

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 501

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 635

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 361

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 299

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 152

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 329

TRingBuffer两端都能增删(快递站版)

TRingBuffer 是一个支持两端增删、下标访问且容量动态增长的环形双端队列。它通过无符号索引的永不归零设计,利用减法自动模运算实现空满判断与元素计数,避免了传统环形缓冲浪费格子的问题。内部以票号(索引)标记首尾,扩容时重排元素为连续存储,保证 O(1) 操作与高缓存效率。虽不线程安全,但其高效性使其成为游戏开发中事件队列、命令缓冲等场景的理想选择。

u013768914的博客 228
上一篇: MoE 系列[六] - Envoy Go 扩展之并发安全
下一篇: MoE 系列(七)| Envoy Go 扩展之沙箱安全
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值