Android разбирает 5 МБ json файл, вызывая, исключение нехватки памяти - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь проанализировать файл json размером 5 МБ, который вызывает исключения из памяти. Я знаю, что решение для этого заключается в использовании анализатора потока json,

Но мне нужно знать, почему это происходит, когда устройства Android имеют 1 ГБ оперативной памяти, по крайней мере, это может выделить 100 МБ для моего приложения. Я думаю, что происходит?

Ответы [ 3 ]

4 голосов
/ 09 февраля 2012

Многие другие приложения будут требовать свою долю в 1 ГБ, и у вас должно быть достаточно свободной оперативной памяти для эффективного сбора мусора.

Ваше приложение может получить только 24 МБ за весь процесс . Некоторые из них должны быть свободными для GC, а некоторые - другими классами, данными и несобранным мусором.

Анализируемый JSON - это, по сути, ряд вложенных списков и хэшей. Предположим, что каждое (в штучной упаковке) число занимает 4-16 байтов, каждая запись в хеш-таблице занимает еще 4-8 байтов для хеша + 4 байта для указателя, плюс некоторые издержки из-за коэффициента загрузки ниже 1, строки становятся UCS2, даже если ASCII и т. д. Длинный JSON со множеством мелких объектов может легко занять 10-кратное ОЗУ.

Старайтесь не анализировать весь файл в памяти, если вам не нужен целый его в оперативной памяти для работы. Попробуйте потоковый анализатор и запись вещей в базу данных.

2 голосов
/ 09 февраля 2012

Один вариант: Android: LargeHeap . Официальная документация по этому вопросу вызывает беспокойство, но AFAICT позволяет использовать 256 МБ кучи, и она была представлена ​​в версии 3.0

.
1 голос
/ 09 февраля 2012

Попробуйте использовать следующую библиотеку для анализа ваших данных json

http://code.google.com/p/google-gson/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...