私はlwpに取り組んでおり、UI(設定、アプリ、実行中)から報告されるメモリ使用量は、メモリ使用量が増え続けていることを示しています(約18Mから始まり、核攻撃する前に90Mまで上昇しました)。それは非常に悪いようで、メモリリークに違いないものを探し出しました。ddms を使用したところ、アプリのメモリ使用量が増加しているにもかかわらず、Dalvik に割り当てられたヒープは ~13.7M であり、時間の経過とともに ~500K を超えて変化しないことがわかりました。OK、ネイティブ ヒープ上にある必要があります。Debug.getNativeHeapSize() と Debug.getNativeHeapAllocatedSize() のログを含めたところ、UI がメモリ使用量の増加を示しているため、一貫してネイティブ ヒープが 5M +/- 2M と報告されています。Dalvik とネイティブ以外に、他にどのようなメモリ使用量がありますか? だから私はダイアン・ハックボーンの素晴らしい記事をここで読んだまだまだ学ぶべきことがたくさんあることに気づきました。adb shell dumpsys meminfo を使用したところ、結果は次のようになりました。
** MEMINFO in pid 6856 **
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native 1118 1116 1076 5072 3452 59
Dalvik 4102 16204 3584 15111 14077 1034
Cursor 0 0 0
Ashmem 2 4 0
Other dev 33344 292 820
「その他の開発者」の巨大な 33M の「Pss」に加えて、Native/Pss と Dalvik/Pss は、大まかに UI がメモリ使用量について報告しているものです。ダイアンの投稿を読んで、自分のメモリ使用量を心配する必要があるかどうかわかりません。「Pss/Other dev」の値は時間の経過とともに上昇していることがわかりますが、ネイティブ ヒープと Dalvik ヒープは、ddms と Debug.getNativeHeapSize() が報告する場所に残っています。私は混乱しており、実際にはリークしていないのに、私のlwpがこの狂った量の「メモリ」を消費していることにユーザーが気付くこと以外に心配する必要があるかどうかわかりません。
誰かがここで何が起こっているのか理解していますか? これは Galaxy Nexus の ICS 4.0.2 です。
編集:その後、アプリが UI で報告された使用量の ~200M に達するまで、Other/Pss を上昇させて、アプリをクラッシュさせようとしました。クラッシュしました:
E/IMGSRV ( 8337): :0: __map: Map device memory failed
W/GraphicBufferMapper( 8337): registerBuffer(0x3364c0) failed -14 (Bad address)
F/libc ( 8337): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
I/DEBUG ( 114): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
だから私は何かを修正する必要があります.dalvikまたはネイティブヒープに問題が見られないため、どこから始めればよいかわかりません。