安卓内存分配

标签 android memory-management

我收到“位图大小超出 VM 预算”错误。我读过有一个 16MB 的内存限制。 In this thread Romain Guy 说“你只能分配 16 MB 整个应用程序的内存”。

但是,我的应用程序必须在达到该限制之前很久就耗尽内存。所以我的问题是:我如何为我的应用程序分配内存......我怎样才能增加对我的应用程序的分配(在最大 16MB 内)?

最佳答案

与任何 Java VM 一样,堆内存将自动增长到最大大小。但是,位图是在 VM 外部分配的,因此您不会在统计信息中轻松“看到”它们。你能做的最好的事情是确保你不使用大的位图,或者使用
缩小它们 http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

当您在 Android 1.6 或更高版本上时,您可以从 Eclipse 生成堆转储,并且可以使用 Eclipse MAT 分析转储。

通常您无法控制真实设备上的最大堆大小,除非您使用的是自定义硬件或固件。

developer.android.com 上应该有一篇关于在 1.6 上转储堆的文章,但我找不到。 :(

编辑
另外,我不得不提一下,您可以使用

为应用程序请求更多内存

android:largeHeap="true"

在 list 中。但这是非常不明智的,因为大多数应用程序不需要它。

关于安卓内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131947/

相关文章:

java - 如何在android studio中调用另一个方法中的许多方法

android - 使用Whatsapp同步Android联系人列表中新插入的联系人以获取链接

php - 让 map 接受动态生成的 KML 文件?

c++ - 使用 NULL 值初始化内存块是否等同于 free?

c - 指针数组更改值,使用 malloc 将内存分配给其他指针时

android - Dagger 2 在 Activity 停止时保存和恢复状态

android - 如何确定 Android 互联网连接?

c++ - 对象池与动态分配

java - JVM如何为静态String变量分配内存?

c++ - 堆栈上的内存分配和缓冲区溢出,x86 ISA32