当前位置:  开发笔记 > 编程语言 > 正文

Android内存分配

如何解决《Android内存分配》经验,为你挑选了3个好方法。

我得到"位图大小超过VM预算"错误.我已经读过内存限制为16MB.在这个主题中, Romain Guy说"你只能为你的整个应用程序分配16 MB的内存".

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



1> botteaap..:

与任何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 = "真"

在清单中.但由于大多数应用程序不需要这个,因此这是非常不适合的.


android:largeHeap ="true"不适用于Application标记.它被删除GB吗?你知道其他任何替代方案吗?
android 1.5也可以,请查看http://kohlerm.blogspot.com/2010/02/android-memory-usage-analysis-slides.html

2> Romain Guy..:

请注意,堆限制取决于设备.在Droid或Nexus One上,该限制为24 MB(以容纳更大的图形资源.)


不,Nexus S在2.3上有32 MB.

3> ThomasW..:

如果您正在使用线程,那么调试器可能是问题的根源.如果您在调试器下运行应用程序,则调试器仍将保留所创建的任何线程,即使它们已完成运行.这会导致在没有调试器的情况下运行应用程序时不会发生的内存错误.

http://code.google.com/p/android/issues/detail?id=7979

https://android.googlesource.com/platform/dalvik/+/master/docs/debugger.html

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有