iOS app內存分析套路


iOS app內存分析套路

Xcode下查看app內存使用情況有2中方法:

  1. Navigator導航欄中的Debug navigator中的Memory
  2. Instruments

一.Debug navigator中的Memory

此方法是查看內存最簡單直接有效的方法,真機調試時,通過Debug navigator中Memory查看app內存,入口如圖

 

 

 

 

 

 

 

 

 

 

 

 

根據這個值查看app內存占用,這個內存是當前app占用的總內存,是堆棧內存、虛擬內存(OpenGL占用的顯存算在虛擬內存中里面)的總和

二.Instruments

啟動Instruments的方法是,Product->Profile,經過漫長的編譯時間后,出現Instruments界面,下圖

Instruments中,可以分析內存的工具有Activity Monitor,Allocations,Leaks。

(1)Leaks

Leaks檢測內存泄露的工具,很有用。Leaks運行中,看到下面這個紅叉叉就表示有內存泄露了

(2)Allocations

Allocations是檢測堆棧內存的,下面的VM tracker檢測虛擬內存。Allocations運行起來如下圖


Allocations永遠比Debug navigator Memory中顯示的內存要小,就是因為Allocations中沒有統計虛擬內存。iOS把OpenGL占用的顯存算作虛擬內存的一部分,下圖參考自

When is a Leak not a Leak? Using Heapshot Analysis to Find Undesirable Memory Growth

 

分malloc出來的內存也算在虛擬內存中,下圖參考自A look at how malloc works on the Mac

 

(3)Activity monitor

Activity monitor看手機整體內存情況的,這里的顯示app內存值和Debug navigator中的Memory顯示的值是一樣的

其他:

1. app最多能占用多少內存不閃退

占用機器內存的一半左右就會閃退,和系統版本、后台程序數有關

不同渠道對內存有不同的要求,例如如下某渠道

2. iOS app為什么內存沒有泄露,內存卻降不下來

eg: 創建大概20個哥布林spine動畫,此時內存占用46M,然后釋放掉,內存占用竟然還是46M,以為是spine有內存泄露,Leaks檢測沒有發現內存泄露。反復加載釋放20個哥布林,內存都沒有超過48M,但是為毛內存沒有下降,而是維持在46M左右?

因為(1)圖片加入了TextureCache,占用了部分內存(2)malloc出來的一部分內存算到了VM(虛擬內存)中,為了下次malloc速度更快,這部分內存雖然調用了free,但iOS系統依然沒有將其回收。這就是上面說的部分malloc出來的內存也算在虛擬內存中。
這可以在mac模擬器上測試,malloc一塊4M的內存,然后free之,內存不降

3. 怎么進行app內存測試

(1) 用Leaks檢測內存泄露
(2) 反復進入退出一個功能頁面,在Debug navigator中看內存是不是持續上升。內存持續上升說明內存漏了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM