垃圾回收(GC)vs自动引用计数(ARC)

2017 Mar 6

Swift之父,Chris Lattner,关于GC(Garbage Collection)和ARC(Automatic Reference Counting)哪个“更好”的一个访谈。

GC和ARC都可以让程序员不用去关心内存管理(在一定程度上)。 GC是后台起线程去默默回收对象,ARC是通过编译器帮助插入回收对象的代码; GC在实现时常常会用到write barrier; 所以两者都有一定的性能损耗。

GC和ARC都不能完全解放程序员对内存的管理。 用GC,需要关心stop the world、大对象的泄漏等; 用ARC需要关心循环引用等。

但Chris Lattner更推崇ARC,因为ARC给程序员一个选择,让他们(在必要的时候)可以完全地、自主地去管理内存。 Java之类的GC语言不能去除垃圾回收器。 所以Swift可以做为“系统级”程序开发语言,Java不能。