Objective c 为什么Cocoa应用程序会占用这么多内存?

Objective c 为什么Cocoa应用程序会占用这么多内存?,objective-c,cocoa,memory,Objective C,Cocoa,Memory,即使是在Xcode中创建新Cocoa项目时生成的标准空白窗口Cocoa应用程序也使用了近6MB的内存。这是什么原因?是否有可能减少应用程序的使用量,或者OSX只是以不同的方式为Cocoa应用程序管理内存 我不是在抱怨。我知道性能“不再重要”(编辑:我的意思是,它比可读性/可维护性/程序员的时间更重要)。我只是好奇。我在这方面有点手足无措,但我想这是因为所有添加的库都必须进行大量设置,并且没有必要进行垃圾收集,因此它们只会浪费内存;另外,即使所有内存都自动释放,它也会等到第一个空闲事件,也就是创建

即使是在Xcode中创建新Cocoa项目时生成的标准空白窗口Cocoa应用程序也使用了近6MB的内存。这是什么原因?是否有可能减少应用程序的使用量,或者OSX只是以不同的方式为Cocoa应用程序管理内存


我不是在抱怨。我知道性能“不再重要”(编辑:我的意思是,它比可读性/可维护性/程序员的时间更重要)。我只是好奇。

我在这方面有点手足无措,但我想这是因为所有添加的库都必须进行大量设置,并且没有必要进行垃圾收集,因此它们只会浪费内存;另外,即使所有内存都自动释放,它也会等到第一个空闲事件,也就是创建窗口之后。删除不需要的库/框架,或者在从nib加载窗口后强制在某处进行垃圾收集,看看它下降了多少


我不担心。一部分内存可能会在以后返回,其余的则是您为一个强大的框架所付出的代价。

取决于您使用的所有框架(API)。将其与低级别ops完成的VM分配相结合


只值得尝试减少堆alloc(total)以及代码的驻留大小。确保有效地分配数据结构,并尝试使用非常著名的“-Os”优化标志(大小优化)进行编译。对于被可可吃掉的VM,你无能为力。我真的不担心它。

OSX在共享内存和写页复制方面发挥了很大的作用,所以它不需要为每个应用程序占用那么多物理RAM

通过运行以下命令,可以精确检查内存块的映射方式:

sudo vmmap <PID of the process>
sudo-vmmap

对于开发人员来说,这显然是一个“WTF”时刻。问题通常是——为什么我的琐碎应用程序会占用这么多内存

答案取决于底层框架。你可能会说6MB太多了,但实际上,它什么都不是

如今,计算机配备2GB内存的情况并不少见。IMAC的库存是4GB。计算机产业的全部意义在于耗尽一台机器所拥有的所有资源,以使它能够继续发展


是的,在可能的情况下,您应该避免出现故障(例如,不要在启动时加载500万个点阵列)。但除非你的测试版证明你犯了错误,否则就把它列在待办事项清单上

一个与cocoa没有直接联系但对框架一般有效的因素是开销不是线性的。通常有一个固定的和可变的“价格”,就管理费用而言,使用该框架


当您创建一个简单的空白窗口时,固定的开销是巨大的,但是当您创建一个包含数十个窗口、对话框、控件和所有窗口的应用程序时,相对于应用程序本身的大小,初始的固定开销变得微不足道

我是唯一一个对表演不再重要的想法感到恼火的人吗?并不是说表演不重要。在100%的最佳性能和使用增加一些开销但使开发更容易的框架之间存在一个权衡。所以,是的,6MB的空白窗口是很高的,但是如果框架允许你在更短的时间内开发应用程序,这是值得的。你如何衡量一个应用程序使用了多少“ram”?你是在看顶部的RPRVT,还是别的什么?@Chris Hanson:我只是在看活动监视器中的“真实内存使用情况”窗格。还有一个非常基本的要点:osx上的所有窗口都是双缓冲的,所以只需打开一个窗口,就可以使用2*窗口宽度*窗口高度*4个字节