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

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

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

Solutions Collecting From Web of "Как слушать события GC в Android"

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

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

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

  • TRIM_MEMORY_RUNNING_MODERATE Ваше приложение работает и не считается killable, но устройство работает на низкой памяти, и система активно убивает процессы в кеше 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

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

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

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

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

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

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