我收到“位图大小超过VM预算”错误。我已经读过内存限制为16MB。 In this thread Romain Guy说“你只能分配16 MB 整个应用程序的内存“。
但是,我的应用程序必须在达到该限制之前很久就会耗尽内存。所以我的问题是:如何为我的应用程序分配内存...如何增加我的应用程序的分配(最大16MB内)?
答案 0 :(得分:36)
与任何Java VM一样,堆内存将自动增长到最大大小。但是,位图在VM外部分配,因此您不会在统计信息中轻松“看到”它们。您可以做的最好的事情是确保不使用大位图,或使用
缩小它们
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
从Eclipse开始,您可以在Android 1.6或更高版本上生成堆转储,并且可以使用Eclipse MAT分析转储。
通常,您无法控制真实设备上的最大堆大小,除非您使用自定义硬件或固件。
在developer.android.com上应该有一篇关于在1.6上转储堆的文章,但是我找不到它。 :(
修改强>
另外,我必须提到您可以使用
清单中的机器人:largeHeap = “真”
。但由于大多数应用程序不需要这样做,因此这是非常不适合的。
答案 1 :(得分:11)
请注意,堆限制取决于设备。在Droid或Nexus One上,该限制为24 MB(以容纳更大的图形资源。)
答案 2 :(得分:6)
如果您正在使用线程,那么调试器可能是问题的根源。如果您在调试器下运行应用程序,则调试器仍将保留所创建的任何线程,即使它们已完成运行。这会导致在没有调试器的情况下运行应用程序时不会发生的内存错误。
http://code.google.com/p/android/issues/detail?id=7979
https://android.googlesource.com/platform/dalvik/+/master/docs/debugger.html
答案 3 :(得分:-1)
我最近找到了你问题的答案。
转到Android SDK目录和
运行sdk管理器(工具 - > android运行此文件)
在SDK管理器中,转到工具 - >管理AVD
现在Android Virtual Device Manager对话框已打开..
在该窗口中选择您的AVD并单击编辑
现在在SD卡部分选择SIZE并设置1024 MiB 在硬件部分单击新建,然后选择属性“最大VM应用程序堆大小” 现在设置100(根据您的应用程序要求) 最后点击“编辑AVD”
编辑后点击sdk Manager上的点击刷新按钮
现在在AVD中运行您的应用程序,问题就解决了。