问题描述
我的应用程序的源代码中的以下行创下的OOM错误
图像= BitmapFactory.de codeStream(assetManager.open(imgFilename));
就在导致应用程序分配要与OOM错误丧生:
(...)
08-05 21:22:12.443:I / dalvikvm堆(2319):从25.056MB钳目标GC堆到24.000MB
08-05 21:22:12.443:D / dalvikvm(2319):GC_FOR_MALLOC释放< 1K,50%的自由2709K / 5379K,外部18296K / 19336K,暂停58ms
08-05 21:22:14.513:D / dalvikvm(2319):GC_EXTERNAL_ALLOC释放< 1K,50%的自由2709K / 5379K,外部18296K / 19336K,暂停101ms
08-05 21:22:14.903:I / dalvikvm堆(2319):从25.073MB钳目标GC堆到24.000MB
08-05 21:22:14.903:D / dalvikvm(2319):GC_FOR_MALLOC释放0K,50%的自由2709K / 5379K,外部18312K / 19336K,暂停53ms
08-05 21:22:22.843:D / DDM堆(2319):堆GC的请求
08-05 21:22:22.963:I / dalvikvm堆(2319):从25.073MB钳目标GC堆到24.000MB
08-05 21:22:22.963:D / dalvikvm(2319):主题ID = 1:仍暂停撤消后(SC = 1 DC = 1)
08-05 21:22:22.963:D / dalvikvm(2319):GC_EXPLICIT释放1K,50%的自由2710K / 5379K,外部18312K / 19336K,暂停116ms
DDMS报告有关堆的状态类似的画面:
堆大小:5.254 MB
分配:2.647 MB
免费:2.607 MB
%使用:50.38%
#Objects 49028
单步超过此线导致的OOM错误:
08-05 21:26:04.783:D / dalvikvm(2319):GC_EXTERNAL_ALLOC释放< 1K,50%的自由2710K / 5379K,外部18312K / 19336K,暂停57ms
08-05 21:26:05.023:E / dalvikvm堆(2319):2097152字节外部分配太大,此过程。
08-05 21:26:05.163:I / dalvikvm堆(2319):从25.073MB钳目标GC堆到24.000MB
08-05 21:26:05.163:E / GraphicsJNI(2319):虚拟机不会让我们分配2097152字节
08-05 21:26:05.163:D / dalvikvm(2319):GC_FOR_MALLOC释放0K,50%的自由2710K / 5379K,外部18312K / 19336K,暂停30毫秒
08-05 21:26:05.283:D / Skia的(2319):---德codeR->德code返回false
- 按imgFileName引用的文件的大小被报告为&所述; 400K在Windows上。那么,为什么BitmapFactory.de codeStream尝试分配2MB?
- 为什么会出现一个OOM错误时,似乎有足够的可用空间?
此应用程序的目标是Android 2.2及了。
在此先感谢!
请参阅本作指导上更高效地加载大量位图:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
一个400 KB的图像文件可以很容易地占用5-10 MB的RAM。
My app is hitting an OOM error at the following line in the source:
image = BitmapFactory.decodeStream(assetManager.open(imgFilename));
Just before the allocation that causes the app to be killed with an OOM error:
(...)
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 <1K, 50% free 2709K/5379K, external 18296K/19336K, paused 58ms
08-05 21:22:14.513: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed <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
DDMS reports a similar picture about the state of the heap:
Heap Size: 5.254 MB
Allocated: 2.647 MB
Free: 2.607 MB
%Used: 50.38%
#Objects 49,028
Single stepping over this line results in an OOM error:
08-05 21:26:04.783: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed <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->decode returned false
- The size of the file referenced by "imgFileName" is reported to be < 400K on Windows. So why does BitmapFactory.decodeStream try to allocate 2MB?
- Why is there an OOM error when there seems to be enough free space?
This app is targeting Android 2.2 and up.
Thanks in advance!
Please see this for a guide on loading large Bitmaps more efficiently:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
A 400 KB image file can easily take up 5-10 MB of RAM.
这篇关于安卓:BitmapFactory.de codeStream()出内存拥有2MB免费堆一个400KB的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!