android java.lang.OutOfMemoryError

6
当我从网站下载大量数据时,出现了以下错误信息:
I/global  (20094): Default buffer size used in BufferedInputStream constructor.
It would be better to be explicit if an 8k buffer is required.
D/dalvikvm(20094): GC freed 6153 objects / 3650840 bytes in 335ms
I/dalvikvm-heap(20094): Forcing collection of SoftReferences for 3599051-byte al
location
D/dalvikvm(20094): GC freed 320 objects / 11400 bytes in 144ms
E/dalvikvm-heap(20094): Out of memory on a 3599051-byte allocation.
I/dalvikvm(20094): "Thread-9" prio=5 tid=17 RUNNABLE
I/dalvikvm(20094):   | group="main" sCount=0 dsCount=0 s=0 obj=0x439b9480
I/dalvikvm(20094):   | sysTid=25762 nice=0 sched=0/0 handle=4065496

有人能帮我吗?


显然它用完了内存... 你具体需要什么帮助? - flodin
2
请至少提供完整的堆栈跟踪信息以及一些上下文信息,说明您如何下载数据(请注意,错误消息中提到了 BufferedInputStream)。 - Toni Menzel
1个回答

1

单个应用程序无法访问所有可用的设备内存。如果你要下载大量数据,请考虑在进行过程中将其写入SD卡,而不是试图完全保存在内存中。


4
OutOfMemory异常通常与磁盘内存无关,而是与堆内存或内存/ RAM有关。(请参阅http://java.sun.com/j2se/1.4.2/docs/api/java/lang/OutOfMemoryError.html) - Toni Menzel
嗨,Adamp, 我正在写入SD卡,但仍然出现OutOfMemory错误。你能告诉我如何回收Drawable吗? - androiddream
@Toni:在尝试一次性将整个数据集加载到内存中会导致OOM的情况下,您经常可以分批处理本地存储中的数据。@xiangdream:如果您的大型数据是以Drawable形式(BitmapDrawable?)的图像,请查看BitmapFactory解码方法和BitmapFactory.Options的inSampleSize字段。您可以在加载图像时重新采样为较小的大小以节省内存。 http://developer.android.com/reference/android/graphics/BitmapFactory.html更多关于您正在尝试做什么的信息将会很有帮助。 :) - adamp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接