2012-02-09 36 views
0

我试图解析5MB的JSON文件,这是造成内存不足异常,我知道这样做的解决方案是使用JSON流解析器,Android的解析5MB JSON文件造成,内存溢出异常

但是我需要知道为什么在Android设备具有1GB内存的情况下发生这种情况,至少它可以为我的应用程序分配100MB的数据,我认为,发生了什么?

+1

也许答案确实不是发送5MB的JSON数据! – dbrin 2012-02-09 05:26:09

+1

不在我的控制之下:( – 2012-02-09 05:27:39

回答

2

一个选项:android:largeHeap。关于这方面的官方文档令人沮丧,但AFAICT它允许你使用256MB的堆,并且它在3.0中引入了

4

许多其他应用程序将要求其1GB的一部分,你必须有足够的可用内存,使垃圾收集效率。您的应用只能得到24 MB for its entire process。其中一些必须为GC保留自由,其中一些由其他类,数据和未收集的垃圾收集。

解析JSON本质上是一些嵌套列表和散列。假设每个(盒装)数字需要4-16个字节,散列表中的每个条目需要另外4-8个字节的散列+4个字节的指针,加上一些开销,由于加载因子低于1,字符串变成UCS2,即使ASCII是足够,等长JSON与许多小物件可以轻松地采取10倍的RAM。

尽量不要将整个文件解析到内存中,除非您需要将其中的整个存储在RAM中进行操作。尝试流式解析器并将其写入数据库。