Само по себе расследование длинное и стоит того чтобы почитать, поэтому вот вам короткое напоминание:
👉 В LeakCanary есть компонент, работающий во время выполнения, который "привязывается" к объектам с известным жизненным циклом. Когда эти объекты получают событие жизненного цикла
DESTROY, LeakCanary использует WeakReference и ReferenceQueue, чтобы убедиться, что они собираются сборщиком мусора, как и ожидалось.👉 Если же какой-либо из этих объектов удерживается в памяти, то есть "утекает", LeakCanary инициирует создание
heap dump, а затем анализирует этот дамп, чтобы найти кратчайший путь сильных ссылок от GC Roots до "утекающего" объекта. Этот путь называется leak trace и он подсвечивает ссылки, которые мешают сборщику мусора удалить объект.