title: Android: do I have a memory leak?
body: <p>I am working on an lwp where over time, the memory usage reported thru the UI (settings, apps, running) shows an ever increasing memory usage (starts at ~18M and has climbed as high as 90M before I nuked it).  That seems very bad and got me hunting down what must be a memory leak.  So I used ddms and it shows that while the the app shows increasing memory usage, the Dalvik allocated heap is ~13.7M and it doesn't vary more than ~500K over time.  OK, so it must be on the native heap.  I included a log of Debug.getNativeHeapSize() and Debug.getNativeHeapAllocatedSize() and they both report ~5M of native heap +/- ~2M, consistently as the UI shows the increasing memory usage.  What other memory usage is there besides Dalvik and native?  So I read Diane Hackborn's excellent post <a href="https://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android">here</a> and realized I had a lot more to learn.  I used adb shell dumpsys meminfo and the result looked like:</p>
  
  <pre><code>** 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
  </code></pre>
  
  <p>The huge 33M "Pss" for "Other Dev" plus the Native/Pss and Dalvik/Pss is roughly what the UI is reporting for memory usage.  Reading Diane's post, I don't know if I should be worried about my memory usage or not.  I can see that that "Pss/Other dev" value is climbing over time but my native and Dalvik heap are remaining where ddms and the Debug.getNativeHeapSize() report they are.  I'm confused and don't know if I should be concerned other than that users will see that my lwp is consuming this crazy amount of "memory" when as far as I can see, it is not actually leaking.</p>
  
  <p>Does anyone understand what is going on here?  This on a Galaxy Nexus, ICS 4.0.2.</p>
  
  <p>EDIT:  I subsequently tried to crash the app by letting the Other/Pss climb until the app reached ~200M of reported usage in the UI.  It did crash:</p>
  
  <pre><code>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): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
  </code></pre>
  
  <p>So I have something to fix, I have no idea where to start since I can't see any problem on the dalvik or native heap.</p>