title: Android: BitmapFactory.decodeStream() out of memory with a 400KB file with 2MB free heap
body: <p>My app is hitting an OOM error at the following line in the source:</p>
  
  <pre><code>image = BitmapFactory.decodeStream(assetManager.open(imgFilename));
  </code></pre>
  
  <p>Just before the allocation that causes the app to be killed with an OOM error:</p>
  
  <pre><code>(...)
  08-05 21:22:12.443: I/dalvikvm-heap(2319): Clamp target GC heap from 25.056MB to 24.000MB
  08-05 21:22:12.443: D/dalvikvm(2319): GC_FOR_MALLOC freed &lt;1K, 50% free 2709K/5379K, external 18296K/19336K, paused 58ms
  08-05 21:22:14.513: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed &lt;1K, 50% free 2709K/5379K, external 18296K/19336K, paused 101ms
  08-05 21:22:14.903: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
  08-05 21:22:14.903: D/dalvikvm(2319): GC_FOR_MALLOC freed 0K, 50% free 2709K/5379K, external 18312K/19336K, paused 53ms
  08-05 21:22:22.843: D/ddm-heap(2319): Heap GC request
  08-05 21:22:22.963: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
  08-05 21:22:22.963: D/dalvikvm(2319): threadid=1: still suspended after undo (sc=1 dc=1)
  08-05 21:22:22.963: D/dalvikvm(2319): GC_EXPLICIT freed 1K, 50% free 2710K/5379K, external 18312K/19336K, paused 116ms
  </code></pre>
  
  <p>DDMS reports a similar picture about the state of the heap:</p>
  
  <pre><code>Heap Size:  5.254 MB
  Allocated:  2.647 MB
  Free:   2.607 MB
  %Used:  50.38%
  #Objects    49,028  
  </code></pre>
  
  <p>Single stepping over this line results in an OOM error:</p>
  
  <pre><code>08-05 21:26:04.783: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed &lt;1K, 50% free 2710K/5379K, external 18312K/19336K, paused 57ms
  08-05 21:26:05.023: E/dalvikvm-heap(2319): 2097152-byte external allocation too large for this process.
  08-05 21:26:05.163: I/dalvikvm-heap(2319): Clamp target GC heap from 25.073MB to 24.000MB
  08-05 21:26:05.163: E/GraphicsJNI(2319): VM won't let us allocate 2097152 bytes
  08-05 21:26:05.163: D/dalvikvm(2319): GC_FOR_MALLOC freed 0K, 50% free 2710K/5379K, external 18312K/19336K, paused 30ms
  08-05 21:26:05.283: D/skia(2319): --- decoder-&gt;decode returned false
  </code></pre>
  
  <ol>
  <li>The size of the file referenced by "imgFileName" is reported to be &lt; 400K on Windows. So why does BitmapFactory.decodeStream try to allocate 2MB?</li>
  <li>Why is there an OOM error when there seems to be enough free space?</li>
  </ol>
  
  <p>This app is targeting Android 2.2 and up.</p>
  
  <p>Thanks in advance!</p>