2011-04-01 41 views
24

從儀器屏幕截圖中可以看出,Allocations認爲我的應用程序(Ongo)僅使用7.55 MB的內存,而Memory Monitor則使用53.30。此外,免費系統內存與應用程序正在使用的內存量幾乎沒有關聯。有誰知道爲什麼這兩種工具之間有這麼大的分歧?此外,是否有可能找到低系統內存的來源或如何避免這麼快耗盡?我的應用程序似乎沒有泄漏內存,但不知何故它耗盡了系統資源。樂器與iOS:爲什麼Memory Monitor不同意分配?

感謝

Instruments Y U Lie?

+0

沒有人知道這個的原因?我唯一的猜測是,使用屏幕的房地產圖像不分配給應用程序,但在內存監視器。分配不跟蹤整個進程的內存使用情況,還是內存跟蹤內存不在我的進程中? – Brian 2011-04-11 15:36:47

+1

是不是內存監視器跟蹤內存的所有正在運行的應用程序和分配工具只適用於您的應用程序? – 2011-04-11 15:48:19

+1

@iPortable ofc它是,這就是爲什麼他沒有比較所有的內存使用,但只有它的應用程序...閱讀好問題。 – 2011-04-11 16:02:35

回答

2

對於那些誰在2012年以後看到這個帖子:

真正加載到設備的物理內存的內存是在虛擬機跟蹤儀的駐留內存。

分配工具只標記由malloc/[NSObject alloc]和一些框架緩衝區創建的內存,例如解壓縮的圖像位圖不包含在分配工具中,但它總是佔用大部分內存。

請觀看WWDC 2012 Session 242 iOS應用程序性能:內存從Apple獲取信息。

29

我相信這是由於這樣的事實:從OpenGL ES的內存使用量從隱藏ObjectAlloc中,但在內存監視器計數。例如,在他的問題here中查看zoul的測試,他在ObjectAlloc中創建紋理時觀察到輕微上升,但是當傳遞給OpenGL ES時,該內存從該工具中消失。內存監視器仍然追蹤該紋理內存。

這應該包括UI元素的視覺方面,比如圖層和視圖,因爲CALayers實際上是OpenGL ES紋理的包裝器。 UI元素的實際2D圖像表示看起來不會被ObjectAlloc跟蹤,這導致ObjectAlloc中的總值更低。

ObjectAlloc仍然適用於跟蹤分配的數量和類型,並且自堆積功能出現以來更具價值。你只是想與內存監視器合作,看看你真正的整體內存使用情況。

+3

感謝您的答案布拉德。 50分鐘到格蘭芬多。我希望得到一個更明確的答案,可能會指出我錯過的一些文檔,但猜測沒有人會有。無論如何,祖爾的測試很有趣。 – Brian 2011-04-17 15:47:28

+0

感謝您的回答布拉德,我的應用程序是CoreData和UIWebView沉重,所以我想我應該仔細看看後者(內存監視器報告說我的應用程序正在使用〜100 MB,iPad 1,iOS 5)。 – 2012-02-09 16:13:33

3

內存監視器將統計應用程序佔用的大部分或全部資源,包括在內核級別間接分配的資源。這包括Brad建議的AFAIK視頻內存(紋理等),還包括內存映射文件和可能的大內核結構,如套接字。該名單可能是很長......

+0

Joe,內存顯示器非常接近你感興趣的數字。我們追逐了一個特定的錯誤很長一段時間,蘋果工程師丟失了內存/沒有在內存顯示器中佔用內存,最終導致應用程序崩潰,有時電話!但這是非常罕見的,從未解決。 – 2011-04-15 08:20:58

0

封裝在對GCD的調度調用的大括號內的任何代碼都被屏蔽了兩件事:錯誤報告和有時是分配計數。這通常只適用於CoreFoundation或其他任何非UIKit或非NSFoundation。

相關問題