2012-02-09 76 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中進行操作。嘗試流式解析器並將其寫入數據庫。