мое приложение для приложений Android низкое. от logcat я обнаружил, что многоразовый фактор - сбор мусора. он потребляет по крайней мере 110 мс в каждом gc. gc показывает часто. Есть ли способ определить собранные объекты?android определить GC освобожденный объект
ответ
Отъезд видео в http://developer.android.com/videos/index.html
особенно тот разговор на «Сделайте свой UI быстрее», есть много дизайна лучшие практики, показанные в видео.
Это, безусловно, поможет вашему приложению работать быстрее.
В моем приложении мне нужно разобрать xml-файл, загруженный с сервера , для синтаксического анализа данных из каждого тега я использовал метод, показывающий ниже открытых пустых символов (символ сп [], Int начала, длина Int) { \t \t \t \t \t, если (in_mapData) { \t \t, если (this.in_evtUrl) {\t myXmlDataSet.setExtractedEvtUrl (новая строка (ch, начало, длина)); } этот метод вызывается для каждого чтения содержимого тега. Является ли это причиной сбора мусора, поскольку я часто использую новый метод String()? если да, дайте мне подзаголовок этому методу. – asifkt
Вам нужно будет проследить свои методы, чтобы проверить, что генерирует мусор. Его действительно трудно найти, только с кодом. Вы можете попробовать использовать другую синтаксическую разборку. – srinathhs
Я использовал класс, который расширяет DefaultHandler для обработки xml-обработки. читая данные xml, я получаю массив char. Для получения строки я должен преобразовать ее в строку, вызвав новый метод String().Я думаю, что это причина GC.If, я получаю данные как строку, я могу решить эту проблему ??? то это класс разбора xml для получения данных в виде строки. Я использую HTC wildfire с Android 2.1. – asifkt
Это не странное значение для Android GC. Значения ~ 100 мс и ~ 500К являются довольно средними, но, конечно, это зависит от спецификаций проекта. Реальная проблема заключается в частоте, которую ваш код вызывает вызов GC.
Вот пример: если вы реализуете списки через ListView
и некоторые пользовательские Adapters
, вы можете получить наихудшую производительность и лучше всего в зависимости от того, как вы пишете свой код для них. Если вы не оптимизируете списки и не создаете новый вид (путем раздувания его из файла .xml
), вы будете получать вызовы GC очень часто, и это воспринимается как небольшие зависания или зависания в пользовательском интерфейсе.
Лучшим методом определения того, что вызывает проблему GC, является его локализация. Запустите приложение и используйте его в одной части одновременно, отслеживая DDMS для GC gumps, а затем посмотрите, какой элемент или Activity вызывает большинство из них и оттуда.
Также попробуйте мониторинг использования памяти с помощью некоторых инструментов. Например, если вы используете Eclipse, есть инструмент с именем MAT, который даст вам немного больше информации об использовании объектов во всем вашем проекте.
В инструменте DDMS перейдите на вкладку «Отслеживание распределения». Выберите свое приложение из списка и нажмите «Начать отслеживание». После использования приложения для бит выберите «Получить распределения».
Это покажет вам список из 512 последних распределений с размерами и стеками стека. Из этого вы должны быть в состоянии сказать, что ест память и вызывает GC.
В моем приложении для каждого действия касания вызывается новый внутренний класс, который расширяется AsyncTask. Должен ли я построить новый класс при каждом касании? если я создаю внутренний класс как статический и вызову этот класс вместо вызова «new class.execute (parameter)», я могу повысить производительность? – asifkt
Не знаю. Вы можете открыть для этого новый вопрос. – fadden
- 1. Объект, освобожденный в режиме ARC
- 2. Android - почему GC внезапно удаляет мой объект?
- 3. Объект, не освобожденный после исключения в Python 2.7
- 4. Как определить поток финализатора GC?
- 5. Объект получает освобожденный после передачи в метод
- 6. Плохая ссылка на уже освобожденный объект
- 7. Представитель NSDrawer, указывающий на освобожденный объект?
- 8. «попытка сохранить освобожденный объект» в круговой ссылке
- 9. Android GC - LogCat всегда показывает GC активность
- 10. Определите, когда запускается Android GC
- 11. поведения GC когда прижав объект
- 12. Понимание Android GC Сообщения
- 13. Android GC Поведение
- 14. Есть ли способ определить, использует ли Mono GC GC или SGen GC во время выполнения?
- 15. Android Как запрограммировать освобожденный USB-интерфейс
- 16. Как определить причину молодого gc приложения Java
- 17. Как определить пропускную способность JVM GC?
- 18. Как определить, работает ли параллельный GC .Net
- 19. Определить, какие объекты JavaScript были освобождены GC
- 20. Ошибка «Освобожденный значение» при попытке определить тип в OCaml
- 21. Java/Android: Определить объект с неизвестным типом
- 22. Преждевременно освобожденный контроллер вида
- 23. Как метод GC GC callizeize()?
- 24. android memory monitor - "cause GC"
- 25. Vastly Overzealous GC на Android
- 26. Выход Android GC HTC One
- 27. MailboxProcessor.Dispose не делает объект GC collectible
- 28. Java GC не собирает определенный объект
- 29. .NET GC удаляющий объект в использовании
- 30. WPF Dispatcher не освобождает объект для GC
Это в эмуляторе или на реальном телефоне? – Khalos
Надеюсь, что вы не используете класс времени выполнения для бесплатного gc вручную в любом месте – DeRagan
@khalos это реальный телефон – asifkt