Я пишу процедуру для синхронизации большого количества контактов с базой данных контактов Android.Загрузка работает нормально примерно для 700 контактов, после чего я постоянно получаю ошибку кучи памяти, которая вызывает бесконечное количество операторов GC и в итоге перезагружает телефон.Я сталкиваюсь с проблемой желания HTC.
Я проверил размер кучи приложения с помощью инструмента выделения кучи из DDMS, а также извлек файл hprof с помощью Debug.dumpHprofData.В обоих журналах указано, что размер кучи составляет около 2,4 МБ.
Однако я получаю следующие журналы, которые указывают, что размер кучи превышает 32. МБ
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
Я вставил следующеерегистрировать операторы в цикле, в котором была записана моя логика загрузки соединений.
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, поэтому, пожалуйста, будьте осторожны со мной:) .....