2013-03-04 3 views
0

К нисходящим: я не вставляю код, так как мой вопрос обобщен, я отправлю его, как только кто-то его попросит.android - Потребление RAM увеличивается при перезаписи больших объектов

В моем приложении я загружаю плейлист пользователя в виде довольно большого JSONArray при запуске Activity, анализируем и отображаем эти данные в ListView. Если пользователь нажимает кнопку «Обновить», вся операция повторяется, одни и те же объекты перезаписываются. Я заметил, что объем оперативной памяти, используемый приложением, увеличивается с интервалом между 0,4 и 1 МБ при каждом обновлении. Я пытаюсь понять причину, одни и те же адреса памяти просто перезаписываются новыми данными, почему растет потребление ОЗУ? Я также попытался установить все использованные объекты на null перед выполнением обновления, это уменьшило количество ОЗУ, но только приблизительно на 100 КБ.

У меня нет объяснений по этой проблеме, так как есть такие же переменные, которые просто переписываются. Размер ответа сервера не изменился. Любые идеи, как исправить эту утечку памяти?

ответ

1

Поскольку одни и те же адреса памяти не перезаписываются. Вы создаете новые объекты, которые занимают новую память, и обе копии будут храниться до тех пор, пока старая мусор не будет собран. Вы можете ускорить это, убедившись, что нет никаких ссылок на старые данные в любом месте приложения (явно указывая их на нуль) или вызывая System.gc (хотя у него большие отрицательные штрафы). Но рост в этой ситуации ожидается. То, что не должно происходить, состоит в том, что если вы делаете hprof после получения результата несколько раз, вы никогда не должны видеть, что общее количество экземпляров вашего массива становится неограниченным. Если вы это сделаете, вам нужно найти цепочку владельцев и посмотреть, кто все еще висит.

 Смежные вопросы

  • Нет связанных вопросов^_^