6

私のアプリは、理解するのに苦労している理由で、頻繁にクラッシュしています。クラッシュするほどではありません。外部の「不明な」プロセスによって強制終了されます。

Processes
     Name        <UUID>       rpages       recent_max       [reason]          (state)

     test-app    <....>       167111       167111     [per-process-limit] (frontmost) (resume)

巨大なメモリブロック、または無数の小さなブロックを割り当てている場合は理解できましたが、それほどとんでもないことは何もしていません。Instrumentsでプロファイリングすると、アプリは約8 MBしか使用せず、大きなコンテンツをロードすると最大13MB程度になることがあります。ひどいリークはなく、アプリはすぐに強制終了されることがよくあります。

同僚がActivityMonitoryを使用して、シミュレーターで実行しているときにアプリのメモリ使用量を確認し始めました。特定のライブラリを使用し始めると、メモリが約70 MB(シミュレーターでは少し異なると思います)から800MB以上に急増したことに気付きました。 。そこで、デバイスではなくシミュレータでプロファイリングを開始しました。割り当てツールは、アプリが8っぽいMBを使用していることを引き続き報告しますが、VMトラッカーは別の話をします。

楽器のスクリーンショット

つまり...VMTrackerは、割り当てでは見られない重要なメモリ使用量を確認できるようです。

このアプリが使用しているメモリの99%が割り当てツールにないのはなぜですか?

更新: nielsbotの質問に答えて、VM Trackerの情報を詳しく調べたところ、割り当てに表示されていないメモリの大部分がCoreAnimationに起因していることがわかりました。

VMトラッカーのスクリーンショット

4

1 に答える 1

2

VMスペースには共有フレームワークやマップトメモリなどが含まれていると思いますが、割り当てには含まれない場合があります...

常駐サイズは実際に使用されているRAMの量に近いと思います。純粋なVMメモリは、実際に消費される物理RAMではなく、アドレス空間にマッピングすることができます。

たとえば、Safariを見ると、1.92 GBの仮想メモリがマップされていますが、549MBの常駐に近いことがわかります。これは理にかなっていると思います...ここに画像の説明を入力してください

于 2013-03-20T23:40:48.947 に答える