gpt4 book ai didi

ios - 仪器和堆增长,什么时候增长真的是泄漏?

转载 作者:可可西里 更新时间:2023-11-01 02:59:42 25 4
gpt4 key购买 nike

我正在使用设备上的仪器来尝试确定我是否有任何内存泄漏或遗弃。具体来说,我正在使用泄漏和分配。虽然仪器没有指出任何泄漏,但这并不意味着我没有内存问题。我已经为此工作了数周,但我似乎并没有更接近于弄清楚我遇到了什么问题(呃)。

我正在测试一个特定的 Action ,方法是在 Action 之后进行一次堆快照并重复。在前几代“稳定”之后,我可以看到增长和持续计数都从某个数字(几 kb)开始。经过多次重复迭代(比如 10-20 次),一些(不是全部)慢慢地耗尽到 0。这需要一段时间,但它确实发生了。保留持久内存的世代实际上从未向我显示任何我认为有用的东西,因为堆栈跟踪显示了所有系统库。

所以我的问题是:

  1. 这种行为表明什么?我有内存问题吗?某处是否存在某种类型的内存延迟释放?
  2. 在显示持久内存的大量迭代中,一次零堆增长迭代意味着什么?
  3. 如果特定世代的堆栈跟踪仅指向系统库,这是否意味着该世代的堆增长是有效的还是存在错误?或者它是否仍然意味着我这边有什么东西保留在内存中?
  4. 堆栈跟踪显示您的库和方法是什么意思,但它像系统代码一样是灰色的并且有一个小房子图标,而与您的库和方法的一行是黑色的并且有一个小人图标?
  5. 如果我有保留周期之类的东西 - 持续增长不会是一致的吗?

任何见解的答案都将非常有帮助!

最佳答案

我会回答你的问题:

What does this type of behavior indicate? Do I have memory issues? Is there some type of lazy release of memory somewhere?

由于您不知道系统框架如何管理它们的私有(private)内存需求,因此您必须假设是的,在您调用系统框架时,可能会发生延迟/延迟释放内存,这在大多数应用程序中是“每时每刻”。除了不能排除它之外,我可以肯定地说,肯定有 由看似无害的系统框架使用触发的长期分配。 (有关示例,请参阅 this answer 中关于 UIWebView 的长期内存使用的讨论。)

In a sea of iterations that show persistent memory, what does one zero heap growth iteration mean?

很难说。一个很好的一阶猜测可能是与迭代相关的堆增长以某种方式恰好被为前一次迭代分配的内存的延迟/延迟释放所抵消。

If the stack trace for a particular generation points only to system libraries, does this mean the heap growth for that generation is valid or that there is a bug? Or could it still mean that there is something holding onto the memory on my end?

如果 Instruments 显示堆增长,那么堆增长几乎肯定存在。堆增长是否是您可以直接控制的事情取决于。如果您没有调用系统框架(不太可能),那肯定是您的错。调用系统框架后,您必须接受框架可能分配的内存在您的调用返回后仍然分配的可能性。

What does it mean when the stack trace shows your library and method, but it is greyed out like the system code and has a little house icon, vs a a line with your library and method that is in black and has a little person icon?

灰色行表示 Instruments 没有该行的调试符号。就这样。它没有指示任何关于内存使用的具体信息。

If I have something like a retain cycle - wouldn't the persistent growth be consistent?

如果每次迭代都创建一个具有循环保留的新对象图,那么是的,您会期望每次迭代都会导致堆增长至少该对象图的大小。也就是说,小对象图很容易在“噪音”中丢失。如果您有怀疑,一种方法是让“可疑”类的对象执行大量分配,使它们从“噪音”中脱颖而出。例如,使每个实例的对象 malloc 为 1 兆字节(或更多)(显然,在释放实例时释放它。)这可以帮助问题区域突出它们最初可能没有的地方.

关于ios - 仪器和堆增长,什么时候增长真的是泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26414711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com