苹果开发团队在一份最新案例研究中提到,他们认为 “Java 的内存管理已难以满足我们不断提升的性能与效率目标。”因此,团队开始寻找更高效的编程语言。
他们最终选择了 Swift,并报告称:硬件占用降低约 50%、内存消耗减少约 90%、吞吐量提升约 40%。
这次重构针对的是一项密码监测服务:允许用户将自己的密码与泄露凭据列表进行比对。团队指出,该服务每天要处理来自全球设备的数十亿次请求。
该服务运行在 Linux 上,并使用分层加密,这为每个请求都增加了计算复杂度。
一位项目核心工程师回顾道:
“多年里,我们用 Java 承载大规模、关键型工作负载,因为它稳定且高性能。”
不过,随着规模增长,Java 的垃圾回收(GC)逐渐成为问题,于是团队决定评估其他方案。
GC 是一种自动内存管理机制,定期回收未使用内存。尽管 Java 的 GC 多年来持续改进,但在高负载下,停顿与开销仍然可能影响表现。
此外,扩缩容也带来挑战。 服务负载在一天内波动剧烈,苹果会据此调整硬件与带宽。一旦需要快速拉起新实例,启动时间就变得至关重要——而像 Java 这样的托管运行时,往往因运行时需求高而启动较慢。
最终,他们决定以 Swift 重写该服务。
Swift 由苹果开发,是 Objective-C 的现代替代。团队选择了开源的 Vapor Web 框架。Swift 同样具备自动内存管理,但采用 ARC(Automatic Reference Counting)。
虽然 ARC 与其他 GC 方案孰优孰劣一直有争论,但在这项服务中,团队看到了显著收益——例如在 Kubernetes 环境中,内存占用下降约 90%,硬件利用率减半。
在迁移层面,代码行数减少近 85%——这点或许比内存改进更重要。团队认为,Swift 的若干特性让代码更简洁可读:
倾向于协议而非继承;
使用 async/await 处理并发;
强类型减少了对空值检查的需求。
Swift 是否天然比 Java 更高效?抑或这次重写更多得益于更整洁的代码?答案可能是两者兼有。Swift 直接编译为原生机器码,不需要 JVM 或 JIT。
当然,苹果推广 Swift 自有其动机;团队也暗示,从 Java 迁出并不只剩 Swift 一条路——Go(Kubernetes 背后的语言)或 Rust 也可能带来类似收益。
Java 走过 30 年历程,其效率与可靠性早已得到验证。尽管这条消息也许会让部分 Java 社区感到失落,但更大的启示是:当业务对性能与成本的要求足够高时,迁移到更合适的语言,可能带来数量级的收益。
最后:
20个前端开发者必备的响应式布局
深入React:从基础到最佳实践完整攻略
python 技巧精讲
React Hook 深入浅出
CSS技巧与案例详解
vue2与vue3技巧合集
声明:来自JavaScript 每日一练,仅代表创作者观点。链接:https://eyangzhen.com/3317.html