iOS app記憶體分析套路

来源:http://www.cnblogs.com/BigFeng/archive/2016/12/15/6178301.html
-Advertisement-
Play Games

iOS app記憶體分析套路 Xcode下查看app記憶體使用情況有2中方法: 一.Debug navigator中的Memory 此方法是查看記憶體最簡單直接有效的方法,真機調試時,通過Debug navigator中Memory查看app記憶體,入口如圖 根據這個值查看app記憶體占用,這個記憶體是當前ap ...


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中看記憶體是不是持續上升。記憶體持續上升說明記憶體漏了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 效果圖: 點擊菜單 中英文切換 css樣式: .top-nav { font-size: 12px; font-weight: bold; list-style: none; border-bottom: 8px solid #DC4E1B; overflow: auto; //去浮動,使下級的浮動 ...
  • 用 :empty 區分空元素 相容性:不支持 IE8 Demo 假如我們有以上列表: <div class="item">a</div> <div class="item">b</div> <div class="item"></div> 我們希望可以對空元素和非空元素區別處理,那麼有兩種方案。 用 ...
  • window.screen.availWidth 返回當前屏幕寬度(空白空間) window.screen.availHeight 返回當前屏幕高度(空白空間) window.screen.width 返回當前屏幕寬度(解析度值) window.screen.height 返回當前屏幕高度(解析度值 ...
  • 1 「喂飽」用戶的三個方法 最近,我看到有創業者開始為自己的用戶增長緩慢而發愁。 實際上,如果將自己的產品當成精心為用戶烹調的牛排,用戶吃一口就放下了餐具。這是火候的問題嗎?是調料問題嗎?還是擺盤裝飾的問題?......也許都不是,這個時候你更應該問自己一個問題:現在用戶是否正處於饑餓的狀態? 那飢 ...
  • 作者講解在Kotlin中Android擴展是如何替代 findViewById 的。 ...
  • fragment是Activity中用戶界面的一個行為或者是一部分。你可以在一個單獨的Activity上把多個Fragment組合成為一個多區域的UI,並且可以在多個Activity中再使用。你可以認為fragment是activity的一個模塊零件,它有自己的生命周期,接收它自己的輸入事件,並且可 ...
  • 如果要添加一個Notification,可以按照以下幾個步驟 1:獲取NotificationManager: NotificationManager m_NotificationManager=(NotificationManager)this.getSystemService(NOTIFICAT ...
  • Handler使用介紹: Handler根據接收的消息,處理UI更新。Thread線程發出消息,通知Handler更新UI。 Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...