【发布时间】:2015-01-04 07:41:56
【问题描述】:
当我尝试使用 StringBuilder.append() 创建大于 4MB 的 String 时,我收到了 OutOfMemoryError。
据我所知,StringBuilder 对大小没有任何限制,String 也没有。
所以我搜索了“如何增加 Android 堆大小”,据我从 this answer 和 this answer 得出的结论,Gingerbread 是唯一一个您无法处理堆大小的版本,因为对于较早的版本,您使用 VMRuntime 类,对于较新的版本 android:largeHeap="true" 在 Manifest 上。
这个假设正确吗?当你在 VMRuntime 和 android:largeHeap="true" 之间时你会做什么?
我使用Runtime.getRuntime().totalMemory()/1048576 - Runtime.getRuntime().maxMemory()/1048576 在我用于测试的设备(Android 2.3.6)上获得“分配了 42.00 MB 的 5.00 MB”。
【问题讨论】:
-
我称之为 X Y 问题:您不应该寻找增加内存的方法。您应该寻找一种方法来解决您在内存中构建 4MB 字符串的问题。
-
@zapl 有时在处理遗留系统时你别无选择。
标签: android out-of-memory heap-memory android-2.3-gingerbread