我主要想知道垃圾收集对性能的影响。对于发布应用程序,垃圾收集的使用是否不受欢迎?
我能想到的另一个问题是使用垃圾收集可能会导致更糟糕的编程。
您是否在应用中使用垃圾收集?
答案 0 :(得分:22)
垃圾收集用于许多生产质量应用程序。 Xcode,Automator,系统偏好设置和其他几个系统应用程序都是GC,您可以预期这种趋势会持续一段时间。
同样,许多开发人员已经接受了GC,并且只在他们的应用程序中使用它。例如,Intuit用于Mac的Quicken和QuickBooks的新版本是垃圾收集。
GC也有许多优点。脱离我的头脑和个人经历:
它使多线程更容易;简单分配是原子所有权声明
它将一堆内存管理卸载到其他内核;它自然是并发的,并从主线程(或计算线程)卸载一堆计算
在很多情况下,分配和释放可以完全在线程的上下文中进行,因此不需要全局同步或锁定
每次发布Mac OS X时,收集器的速度都会加快,这种趋势将继续下去(就像它与系统的其他部分一样)。通过将更多应用程序的计算负载卸载到系统提供的框架,您的应用程序将从底层系统的优化中获得越来越多。
因为收集器非常了解对象图 - 对象之间的指针 - 在内存中,它使分析和调试变得更加容易。现在的问题是“给我一个清单,说明为什么这个物体比我认为的要长的时间更长?”,而不是“这个悬垂的指针来自哪里?”。
这并不是说没有工作要做,以使您的应用程序在GC下以最佳方式工作。肯定有这样的任务!
答案 1 :(得分:5)
自20世纪60年代以来,垃圾收集一直存在,并在许多已发布的应用程序中使用。所有.NET应用都使用垃圾回收。 Apple在Xcode中使用libauto。
垃圾收集通常会导致Cocoa中的应用程序质量更高,因为开发人员可以摆脱内存管理负担。有大量的Cocoa应用程序泄漏! (虽然它可能没有大量的记忆)
我倾向于使用gc,因为我可以更快地扭转我的应用程序,而不必担心消息传递僵尸对象!
答案 2 :(得分:3)
我尽可能使用GC,因为最好的代码是你不必首先编写的代码。另外,正如Bbum在上面指出的那样,在GC下运行意味着如果需要调试任何瓶颈,你可以获得更多可用于性能分析的信息。
答案 3 :(得分:1)
对于任何新的Cocoa应用程序,建议使用垃圾收集,Apple通过在Xcode中使用它来吃自己的狗食。性能是一个有趣的情况,因为虽然您最有可能整体消耗更多的CPU周期,但由于收集器的多线程和访问器方法的简化,应用程序实际上可能在某些区域更快地结束。
计算机可以为我们工作。 Cocoa的引用计数通常很容易管理,但垃圾收集是它现在可以做的另一件事 - 让机器完成工作,这样你就可以专注于重要的事情!
答案 4 :(得分:1)
与其他人一样,我强烈建议使用GC。性能开销通常可以忽略不计!我不需要重复其他用户所说的好处。
但是,我强烈建议编写库而不是应用程序,以便在非GC模式下运行。有些环境无法运行GC代码,iPhone是值得注意的;因此,如果您为自己创建了一个内部库,您希望以后将其重新用于iPhone应用程序,那么我建议将其设计为可以在非GC环境中使用。
将GC代码转换为非GC代码要比其他方法困难得多!