macos - 真实内存 VS。私有(private)内存

标签 macos memory

我有一个 Objective-C 应用程序,旨在使用 WebKit View 长时间运行。随着时间的推移,应用程序会建立相当多的内存,所以我想根据要求准确地向最终用户显示内存使用情况。在 OS X 上的 Activity Monitor 中,我看到我的应用程序 Real Memory 和 Private Memory 的两个内存值。从我读过的内容来看,Private 是该过程所拥有的一切,而 Real 是一个估计值。我应该相信什么?是否有一个特定的公式可以用来计算确切的使用情况而不是 OS X 报告的内容?

不是我的专业领域。

最佳答案

如果你担心内存泄漏,你应该使用 the various tools provided by Apple调试它。

实际内存是进程使用的实际物理内存。

私有(private)内存是仅由该进程使用的物理内存。

虚拟内存是进程的整个虚拟内存的大小,包括那些当前不驻留在物理 RAM 中的页面。

如果您有泄漏,实际上很难通过查看这些数字来判断。例如,一个被分配然后泄露的 block 将永远不会被再次引用,所以它最终会被换出。它将是虚拟内存的一部分,但不是常驻内存的一部分。因此,如果您有泄漏,虚拟内存会随着时间的推移逐渐增加。

另一方面,如果 malloc 找不到未使用的内存块来分配,则虚拟内存会增加,但当 free 归还内存时,虚拟内存不会减少。因此,如果您 malloc 大量 RAM,VM 会增加,但即使您正确释放它,它也不会再减少。如果你也有泄漏,malloc 需要很长时间才能用完回收的 VM,这意味着你可能不会注意到它。

因此,请使用专用的泄漏检测工具。

关于macos - 真实内存 VS。私有(private)内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436860/

相关文章:

c++ - 使用 libMallocDebug 调试内存泄漏

c++ - 如何让Makefile在一个目录下编译多个c文件和h文件

ios - 绝对初学者应该从哪里开始?

java - 类加载与初始化 : Java static final variable

ios - 如何从 WKWebView 获取 cookie?

objective-c - CoreData,单独线程上的子 MOC,意外 : error: NULL _cd_rawData but the object is not being turned into a fault

memory - 在Grails中使用内存域对象的最佳方法是什么?

强制转换/访问相同的内存是 C 中的不同变量

c++ - 同时写入内存和磁盘

将内存从地址复制到缓冲区而不是复制