- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点迷失了。我正在编写一个小应用程序,它在第一步中加载一堆数据并将它们放入数据库中。
对于数据库中的每个条目,我创建一个新对象,希望它能从弧中释放:-)。
仪器工具显示我的应用程序实际上有 5-6 MB 的生活分配。但事件监视器显示我实际上使用了 100 mb 的“物理”(真实)内存?
如何减少 100 MB?您看到的内存泄漏只有 100 kb,这不是原因!?
最佳答案
简短的回答是 - 别担心 - 100Mb 并不是很多。
这里您需要了解的主要事情是“真实”或常驻 RAM 与分配的 RAM 完全不同。如果您分配大量 RAM,它们可能会链接起来,但您没有。
为什么它们不一样?
取消分配(或垃圾收集)的 RAM 通常不会返回到操作系统,因此仍可以“驻留”一段时间。
这很可能是您的情况的罪魁祸首 - 将数据库加载到分配的大量内存(1Gb 临时内存)中一段时间,然后释放它,留下大量 RAM驻留在您的进程中。
请注意,在垃圾收集(包括ARC)中,为对象分配的内存空间可以比它曾经持有的对象存在更长的时间 - 例如如果您分配并立即释放 10000 个 1K 对象,您可能会发现您的实际 RAM 必须增加 10Mb,即使在任何时候只使用 1K 数据。这是因为垃圾收集被推迟到程序运行循环的特殊清理阶段。
驻留 RAM 只能在 4Kb 页面中请求,这意味着即使对于 1 字节分配,也可能分配多达 4Kb 的驻留 RAM。通常,malloc 会尝试在同一个 4k 页面上进行多次分配,但您会看到由于碎片而造成的一些损失。
当前未使用的已分配 RAM 可以调出到磁盘,从而不再驻留
应用程序包含一些(可能很多)内存,这些内存不是由 malloc“分配”的,这包括:
可能是图形区域(例如 X11)、打开文件缓冲区和 mmap(取决于我们认为“分配”的内容。
适用于台式机或笔记本电脑;对于嵌入式设备来说很多,而对于手机或平板电脑则视情况而定。
关于macos - 实际/驻留内存大于 XCode Instruments 报告的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340943/
我是一名优秀的程序员,十分优秀!