我正在尝试理解仪器/分配中的“所有堆和匿名虚拟机”。
这是事情:我只是创建一个新的Swift SpriteKit项目而没有做任何事情我得到了下一个结果:
正如你所看到的,堆积正在成长。不过我没有内存泄漏。我怎么解释呢?这是一个好结果吗?
答案 0 :(得分:2)
关注所有堆分配的实时字节列,以查看应用程序使用的内存量。您无法控制应用程序的匿名VM大小。
专注于堆分配,因为您的应用可以更好地控制 堆分配。 您应用所做的大部分内存分配 堆分配。
匿名VM中的VM代表虚拟内存。 当您的应用程序启动时,操作系统会保留一个块 应用程序的虚拟内存。这块通常要大得多 比你的应用程序需要的内存量。当您的应用分配时 内存,操作系统从块中分配内存 保留
记住前一段中的第二句话。经营 系统确定虚拟内存块的大小,而不是您的应用程序。 这就是为什么你应该专注于堆分配而不是 匿名VM。 您的应用无法控制匿名的大小 VM 强>
来源:http://meandmark.com/blog/2014/01/instruments-heap-allocations-and-anonymous-vm/
答案 1 :(得分:0)
分配信息不包括使用VRAM(视频内存),因此它没有显示APP内存的完整状态,而Xcode内存报告就是这样。
如果您使用图形渲染API,则内存增加的速度将比您想象的要快得多。图形API在VRAM中创建的OpenGL /金属对象的大小将算作APP内存使用。
许多OpenGL指令会将数据从RAM复制到VRAM以供GPU使用。
例如,如果您创建许多纹理并为其设置图像数据。堆分配比VARM分配少得多。
使用过多的RAM和VRAM时将收到提醒MemoryWarning
。