我正在尝试解析5mb的json文件,导致内存不足异常,我知道解决方法是使用json流解析器,
但我需要知道为什么当Android设备有1GB ram时会发生这种情况,至少它可以为我的应用程序分配100MB,我想,发生了什么?
答案 0 :(得分:4)
许多其他应用程序将声称它们的1GB部分,并且您必须有足够的可用RAM来有效地进行垃圾收集。
您的应用只能获得24 MB for its entire process。其中一些必须保留为GC免费,其中一些是由其他类,数据和未收集的垃圾。
Parsed JSON本质上是一些嵌套列表和哈希。假设每个(盒装)数字需要4-16个字节,哈希表中的每个条目需要另外4-8个字节用于散列+ 4个字节用于指针,加上由于负载因子低于1的一些开销,即使ASCII将是字符串,字符串也会变为UCS2有很多小物件的Long JSON可以很容易地占用10倍的RAM。
尽量不要将整个文件解析到内存中,除非你需要在RAM中使用它的整个进行操作。尝试流解析器并将数据写入数据库。
答案 1 :(得分:2)
一个选项:android:largeHeap。关于这个的官方文档是令人痛苦的,但AFAICT它允许你256MB的堆,它是在3.0中引入的
答案 2 :(得分:1)
尝试使用以下库来解析您的json数据