Instruments ObjectAlloc:活跃字节和总体字节的解释

86

我正在使用Instrument的ObjectAlloc工具,试图了解我的应用程序(iPhone)使用内存的情况以及何时、何地使用。

我需要一个关于以下统计数据的基本解释:

  • 实时字节数(Live Bytes)
  • 存活对象数(#Living)
  • 瞬态对象数(#Transitory)
  • 总字节数(Overall Bytes)

当我尝试计算我的应用程序使用了多少内存时,我应该查看实时字节数还是总字节数?这是否包括泄漏的内存?什么是瞬态对象?

谢谢。


6
当您将鼠标悬停在标题上方时,列会有简短的描述。 - Piotr Byzia
2个回答

110

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

活动字节或净字节(Living bytes, or Net bytes)是在选定时间轴上您的应用程序正在使用的内存量。这将包括泄漏的内存,因为泄漏的内存永远不会被释放。

#Living是某个大小/对象类型的分配次数(仍然分配中)。当寻找泄漏时,这非常有用。

例如,如果您重复执行某个操作(例如进出模态视图控制器),并且您看到一个对象的#Living每次都增加同样的数量,那么您可能正在泄漏这些对象。您可以通过深入了解并查看分配对象的确切代码行甚至看到每个对象创建的时间索引来确认。

总内存包括已经释放的内存。跟踪该数字有助于性能优化目的,但如果您只想查看当前内存占用或查找泄漏,则不适用。


3
在整体字节数方面,您将试图优化什么?尝试保持数字较小是否意味着更好的性能? - Dan Rosenstark
4
是的,正确的。性能问题的常见原因之一是意外多次运行相同的代码。“分配”工具可以是一个好的发现方式。例如,即使额外的对象没有泄漏,你可能会想,“为什么我要创建3个那个对象?应该只有一个!” - Ken Aspeslagh
2
Live bytes 指的是您的应用当前使用的内存量。总体(Overall)仅是您的应用程序所做出的所有分配的总和(包括已释放的内存)。 - Ken Aspeslagh
1
@KenAspeslagh 为什么我要关心总字节数,如果它还包含已释放的对象呢? - Dejell
3
如果您正在优化性能,那么您希望在应用程序运行时尽可能减少应用所做的分配数量(即使您没有泄漏这些分配)。过多的分配通常可以表示您的操作不正确。 - Ken Aspeslagh
显示剩余3条评论

18

你能否也附上这份文档的链接? - shoumikhin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接