【发布时间】:2012-12-09 13:22:13
【问题描述】:
由于看起来内存不足或内存损坏情况,我们的应用偶尔会在现场遇到崩溃(通过 BugSense 发现),因此为了帮助我追踪它们,我启用了以下功能:
- Malloc 涂鸦
- Malloc 保护边缘
- 守卫马洛克
- Objective-C 僵尸对象
- Malloc 堆栈日志记录
- 日志异常。
在模拟器中与应用交互一段时间后(不到 30 秒),显示以下消息:
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
GuardMalloc[TrafficDemoEmp-2430]: allocate_pages(): virtual memory exhaused!
GuardMalloc[TrafficDemoEmp-2430]: expandUniquingTable(): VMCopyFailed
禁用 Guard Malloc 后,应用可以正常工作,但启用后,应用会因这些消息而崩溃。当我使用 Leaks and Allocations 工具进行分析时,没有发现任何泄漏,并且所有内存的 Live Bytes 值介于 30 MB 和 80 MB 之间(取决于它当时正在做什么)。当然,对于一个应用来说,这并不是太多的内存。
但是,这些消息表明我的应用程序使用了太多内存,但我不确定是什么导致了虚拟内存耗尽。 Xcode 中是否有其他可用的工具或调试器设置来提供帮助?
谢谢,
大卫
【问题讨论】:
-
NSZombies 会导致你释放的任何东西实际上都没有被释放,因此如果你进行大量分配会耗尽内存。
-
禁用僵尸解决了这个问题。谢谢。
-
嗨,同样的问题也存在,并通过禁用僵尸解决了......谢谢。但我不明白它的影响,你能解释一下吗?
-
@OKNC2 因为实际上并没有释放任何东西,所以内存不可避免地会被释放。
-
@DavidPotter 好的,谢谢您的回复。
标签: ios xcode memory memory-management memory-leaks