17611538698
webmaster@21cto.com

苹果开发团队拒绝 Java,转向 Swift

编程语言 0 113 1天前
图片

近日,苹果内部开发团队在一份新的案例研究中透露道,“Java 的内存管理方法已经不再符合我们日益增长的需求和效率目标。”

于是,该开发团队开始寻找选择更高效的语言。

接着,此团队项目中选择了 Swift 语言,然后称实现了硬件利用率降低 50%,内存减少 90%,吞吐量提高 40%。

此项目服务用于密码监控,依据已泄露的密码列表要求用户检查密码。据开发团队的相关帖子所描述,该应用程序“每天收到来自全球设备的数十亿个请求”。

该服务是在Linux系统上运行,并包含分层加密,这无形中增加了每个请求所需的计算资源。

该项目中的核心开发人员这样表示道:

“多年来,我们的团队一直依赖 Java 来支持大规模、关键型任务服务,因为它拥有久经考验的稳定性和性能。”

但由于Java的垃圾回收机制存在问题,他们最终决定更换为其它语言。

垃圾回收 (GC) 是一种自动管理内存的技术,它会定期释放不再需要的内存。尽管 Java 的 GC 有所改进,但在负载下 GC 暂停及其性能开销仍然存在较大问题。

此外,Java的另一个问题是扩展能力。

服务负载在一天中变化很大,Apple会相应地扩展硬件架构和带宽。当按需启动新硬件时,启动时间至关重要,而像 Java 这样的托管语言由于运行时要求更高,往往会花费更长时间。

该团队最后选择使用 Swift 重写该服务。

Swift 是由 Apple 开发,是 Objective-C 的现代替代方案。所使用的 Web 框架是开源的Vapor。Swift也具有自动内存管理功能,但与 Java 不同,它使用ARC (自动引用计数)实现

ARC 与其他垃圾方法的优缺点存在争议;但在本例的服务中,团队发现了显著的改进,包括对于在 Kubernetes 上运行的服务,内存使用量减少了 90%,硬件利用率降低了一半。

移植的另一个方面,即代码行数减少了近 85%,可能比内存管理更重要。团队发现了 Swift 的一些方面,这些方面使得代码更加简洁明了,包括强调协议(接口)而不是继承,使用 async 和 await 实现并发,以及类型安全,从而消除了对空值检查的需要。

Swift 比 Java 更高效吗?还是说重写只是为了代码更好?两种说法可能都有。

Swift 编译为原生代码,不需要 JVM(Java 虚拟机)或 JIT(即时编译器)。 

苹果推广 Swift 有其自身的原因;尽管团队暗示在决定放弃 Java 后,Swift 并非其必然选择,但不可否认的是,其内部压力巨大,若迁移到 Go(Kubernetes 的开发语言)可能会带来类似的改进,Rust 也是如此。 

Java 正在庆祝其 30 周年,其高效性和可靠性备受赞誉。话虽如此,虽然这个消息会稍微破坏气氛,但值得注意的是,移植到更高效的语言可以带来如此显著的改进与成本的节省。

作者:场长

评论