知方号

知方号

java与swift性能,Swift语言性能分析

java与swift性能,Swift语言性能分析

一、两个疑惑

OC 和 Swift 语言在 Richards 上评测的结果显示,Swift 比 OC 快了4倍,Swift同OC相比会更快,具体应归结在那些因素上面?

通常一个 Swift 项目少则编译五六分钟,多则编译个半个小时也是不为过的事情,Swift 语言既然比 OC 速度快,但是为何实际开发中 Swift 编译却很慢?

二、全文思路介绍

通常一门语言的好坏,通常取决于下面三个因素:

内存分配:主要是指堆内存分配和栈内存分配。

引用计数:主要至于如何权衡引用计数。

方法调度: 主要在于静态调度和动态调度。

除了上面这三个因素之外,另外还有另个影响因素。首先是编译器的优化;其次是这门语言中的一些其他额外特性,如Swift语言中的对面向协议的额外处理。

所以在接下来的篇幅中,笔者将重点从编译器优化、内存分配优化、引用计数优化、方法调用优化以及面向协议编程的实现细节这五个方面来谈谈Swift语言的性能。

三、编译器优化分析

Whole Module Optimizations机制

不得不说编译内部有很多需要开发者需要掌握的技术点,笔者打算后期有时间针对编译相关的东西做一些整理,顺带介绍iOS中的LLVM编译器。如上图所示,这是Swift编译器中引入的Whole Module Optimizations优化机制。在没有这个机制之前,同绝大多数的编译器一样,编译器在编译过程中,会针对每一个源文件先是生成目标文件(.o 文件),然后连接器将不同的目标文件组合起来,最终生成可执行程序。

常规编译过程

试想整个项目中我们定义了这样一个函数

func max(x:T, y:T) -> T {

return y > x ? y : x

}

但是在实际的整个项目中,只有一处我们按照下面的形式使用到了上面这个max方法。

let x = 1

let y = 2

let r = max(x: x, y: y)

因为有了Whole Module Optimizations机制,编译器可以清楚的知道整个项目中只是用到了max函数的Int类型参数比较。所以在编译的过程中,编译器完全可以把max函数看做是一个只支持Int类型数值比较的方法,不用再编译成还需要支持其他类型参数比较的方法。Swift编译器类似的优化还有很多,Whole Module Optimizations为编译器提供了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。