仪器ObjectAlloc:实时字节和总字节的说明


86

我正在使用Instument的ObjectAlloc工具来了解我的应用程序(iPhone)正在做什么以及何时何地在做什么。

我真的希望对这些统计数据有一个基本的解释:

  • 实时字节
  • #活的
  • #暂时的
  • 总字节数

当我尝试确定应用程序正在使用多少内存时,我应该查看活动字节还是总字节?这包括内存泄漏吗?什么是暂态对象?

谢谢


6
当您将鼠标悬停在它们的标题上时,这些列会有简短的描述。
Piotr Byzia'2

Answers:


110

ObjectAlloc 跟踪程序运行期间的所有内存分配和释放。

Living bytes, or Net bytes是多少记忆您的应用程序在你的时间表选择时间使用。这将包括泄漏的内存,因为泄漏的内存永远不会被释放。

#Living是某个特定大小/对象类型的分配发生了多少(并且仍在分配中)。查找泄漏时,这非常有用。

例如,如果您重复执行一个动作(例如从模态视图控制器中出来),并且#Living每次看到一个对象的增长量相同,则可能是这些对象泄漏了。然后,您可以通过向下钻取并查看分配对象的确切代码行来进行确认,甚至可以看到每个对象的创建时间索引。

Overall bytes包括已释放的内存。跟踪该数字以进行性能优化非常有用,但如果您只是想查看当前的内存占用空间或查找泄漏,则不会有用。


3
您将在总字节方面尝试优化什么?尝试将数字保持较小意味着更好的性能?
Dan Rosenstark 2011年

4
是,对的。性能问题的一个常见原因是意外地多次运行同一代码。分配工具可能是一个很好的注意方式。例如,即使多余的对象没有泄漏,您也可能会说:“为什么我要制造3个该对象?应该只有一个!”
肯·阿斯佩斯拉格

2
实时字节是您的应用当前正在使用的内存量。总体只是您的应用程序进行的所有分配的总和(包括此后已释放的内存。)
Ken Aspeslagh 2012年

1
@KenAspeslagh,如果它也包含释放的对象,我为什么还要关心整个字节?
Dejell

3
如果您正在调整性能,那么您希望在应用运行时尽量减少分配的数量(即使您没有泄漏上述分配。)过多的分配通常可以指示您做错了。
Ken Aspeslagh 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.