首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于dalvik初始堆

关于dalvik初始堆
EN

Stack Overflow用户
提问于 2013-11-01 09:26:49
回答 1查看 2K关注 0票数 2

我目前正在开发一个android应用程序,我正在使用自己的设备(连接4)来调试它。对于Dalvik分配的堆大小,我似乎遇到了麻烦,我希望您能在这个问题上帮助我。

我的应用程序正在处理一个文件中相对重要的数据量(~3MB),并使用它生成总计约10 My的java对象。对于一个拥有2GB内存和512 of的堆大小限制的设备来说,这不应该是一个问题(如果我没有弄错的话)。

但是,调试工具告诉我,分配给我的应用程序的堆大小大约是10 me,导致了大量的垃圾收集(每个GC释放了500 GC)。我已经在SO和其他关于Dalvik堆大小模型的论坛上浏览了很多页面,在这个例子中我找到了largeHeap="true" (API级13+)属性,但是它并没有改进任何东西,当设备的初始内存为2GB时,我仍然需要使用10 2GB。我知道操作系统等占用了一些内存,Dalvik也在限制应用程序,但是为什么我不能至少达到512 OS呢?

我有误解什么吗?我错过了什么吗?问题似乎很简单,但我不明白。

我们将非常感谢您的帮助!

PS:请不要建议改用NDK,这对我来说不合适。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-01 14:33:05

如果您没有得到OutOfMemoryError,那么改变堆大小不会影响行为。

Dalvik的托管堆抵制增长,以尽量减少应用程序的内存占用,不幸的是,有时会在特定的大小上“挂起”。通常可以通过分配一个大对象(例如byte[1000000])并立即删除对它的引用来解决这个问题。

FWIW,确保删除引用的最佳方法是将其分配到一个立即返回的方法中。不要仅仅取消引用。Dalvik GC并不是实时精确的,因此它不会忽略寄存器中挥之不去的“死”引用。

(以上所有内容都适用于Android4.4和更早版本。希望这种情况在将来的发行版中得到改善。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19724002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档