为什么Android在加载图像时会分配比所需更多的内存

时间:2012-11-10 15:48:50

标签: android memory-management heap-dump

伙计们,我不认为这是重复的,而不是其中之一我如何避免 OOM 问题。这是对知识的真正追求,所以请等待那些赞成票......

想象一下,我有JPEG500x500像素。我将其加载为ARGB_8888,即“bad as it gets”。

我希望Android分配500x500x4 bytes = a little under 1MB但是,看一下堆转储,您会看到Android分配的次数要多得多,通常是5-10倍的因素。

您经常会在此处看到有关 OOMS 的问题,其中堆栈跟踪显示heap request of say 15MB始终远大于只需要保存图像的字节就可以了。 OP通常会捕获一些downvotes然后被库存答案和关于使用更少内存(感谢Romain!)和缩放的评论轰炸。我认为这里不仅仅是满足人们的需求。

有人知道这是为什么吗?

如果没有明显答案,如果有帮助,我会将 SSCCE 放在一起。

PS。我认为JPEG与PNG等是无关紧要的,因为我们讨论的是后备位图的内存使用量,它只是BPP的x倍y倍 - 或者我是否很慢?

1 个答案:

答案 0 :(得分:1)

它曾经是一种常见的技巧,通过内存管理来获取一个池或内存块,这些内存被分成较小的请求。当我使用嵌入式系统时,通常的做法是维护不同大小的内存池,我们只是分配了一个大于池中请求的块的块。这是一种防止过多内存碎片的便捷方法。也许这发生在这里。