Подтвердить что ты не робот

Как слушать события GC в Android

В любом случае мы можем отслеживать события GC, как это происходит в Android?

В Java я считаю, что мы можем слушать события http://www.fasterj.com/articles/gcnotifs.shtml Но API-интерфейсы java.lang.management недоступны в Android.

4b9b3361

Ответ 1

Зачем вам этот слушатель. Если вы просто хотите узнать, не закончилось ли ваше приложение, просто проверьте это:

Освободить память, когда память становится плотной.

На любом этапе жизненного цикла приложения обратный вызов onTrimMemory() также сообщает вам, когда общая память устройства становится низкой. Вы должны ответить путем дальнейшего освобождения ресурсов на основе следующих уровней памяти, предоставляемых onTrimMemory():

  • TRIM_MEMORY_RUNNING_MODERATE Ваше приложение работает и не считается гибким, но устройство работает на низкой памяти, и система активно убивает процессы в кэше LRU.
  • TRIM_MEMORY_RUNNING_LOW Ваше приложение работает и не считается гибким, но устройство работает значительно ниже в памяти, поэтому вы должны освобождать неиспользуемые ресурсы для повышения производительности системы (что напрямую влияет на производительность вашего приложения).
  • TRIM_MEMORY_RUNNING_CRITICAL Ваше приложение все еще работает, но система уже убила большинство процессов в кеше LRU, поэтому теперь вы должны освободить все некритические ресурсы. Если система не может вернуть достаточное количество ОЗУ, она очистит весь кеш LRU и начнет процессы уничтожения, которые система предпочитает поддерживать в режиме реального времени, например, те, где размещен хостинг. Кроме того, когда ваш процесс приложения кэшируется, вы можете получить один из следующих уровней из onTrimMemory():

  • TRIM_MEMORY_BACKGROUND Система работает на низкой памяти, и ваш процесс близок к началу списка LRU. Хотя процесс вашего приложения не подвергается высокому риску быть убитым, система может уже убивать процессы в кеше LRU. Вы должны освободить ресурсы, которые легко восстановить, поэтому ваш процесс останется в списке и быстро возобновится, когда пользователь вернется в ваше приложение.

  • TRIM_MEMORY_MODERATE Система работает на низкой памяти, и ваш процесс находится в середине списка LRU. Если система будет дополнительно ограничена для памяти, у вас будет шанс, что ваш процесс будет убит.
  • TRIM_MEMORY_COMPLETE Система работает на низкой памяти, и ваш процесс является одним из первых, кто будет убит, если система не восстановит память. Вы должны освободить все, что не критично для возобновления состояния вашего приложения. Поскольку обратный вызов onTrimMemory() был добавлен в уровне API 14, вы можете использовать обратный вызов onLowMemory() как резерв для более старых версий, что примерно эквивалентно событию TRIM_MEMORY_COMPLETE.

Вот ссылка https://developer.android.com/training/articles/memory.html

Ответ 2

Хорошо, это будет отличаться как от далвика, так и от искусства.

в основном вы можете указать оболочке adb для записи событий GC в файле трассировки.

art: https://source.android.com/devices/tech/dalvik/gc-debug.html

Это могут быть и те же команды adb как для искусства, так и для dalvik.

Инструмент мониторинга памяти подключается к этому, когда он отображает графическую карту памяти для вас в студии Android.

Прогматически, вероятно, сложнее. Посмотрите, как FB выполнил свою производительность, поскольку я считаю, что они делают подсчеты GC-событий с родной C/С++-стороны и сопоставляют их в flatbuffer для своего кода инструмента профилирования боковой стороны Java доступ..