Я пишу процедуру для синхронизации большого количества контактов с базой данных Android Contacts. Загрузка работает нормально около 700 контактов, после чего я постоянно получаю ошибку кучи памяти, которая вызывает бесконечное количество операторов GC и заканчивается перезагрузкой телефона. Я столкнулся с проблемой желания HTC.
Я проверил размер кучи приложения с помощью инструмента выделения кучи из DDMS, а также извлек файл hprof с помощью Debug.dumpHprofData. Оба журнала показали, что размер кучи составляет около 2,4 МБ.
Однако я получаю следующие журналы, которые указывают, что размер кучи больше, чем 32.MB
dalvikvm-heap(92): Clamp target GC heap from 33.999MB to 32.000MB
dalvikvm(92): GC_FOR_MALLOC freed 2 objects / 48 bytes in 313ms
Я включил следующие логические операторы в цикле, где была написана моя логика загрузки contatcs.
Log.e("Memory", "free mem =" +runtime.freeMemory());
Log.e("Memory", "total memory =" +runtime.totalMemory());
Это начальное и окончательное значения напечатанного оператора
---------------------------------------------------------------
11-11 12:56:04.168: ERROR/Memory(25132): free mem =871248
11-11 12:56:04.168: ERROR/Memory(25132): total memory =4202464
---------------------------------------------------------------
11-11 13:01:55.408: ERROR/Memory(25132): free mem =891640
11-11 13:01:55.408: ERROR/Memory(25132): total memory =4726752
---------------------------------------------------------------
Это указывает на то, что в логике синхронизации синхронизации отсутствуют какие-либо утечки памяти.
Может кто-нибудь, пожалуйста, сообщите мне, почему размер кучи увеличен (до 32,00 МБ) до такой степени, что устройство снова загружается? Я новичок в Android и Java, поэтому, пожалуйста, легко на меня:).....