у дискорда ситуация была в том, что куча большая, но изменяется редко, поэтому там не получалось заставить сборщик мусора запускаться часто, но когда он запускался, то изза размеров кучи останавливал сервис надолго
основной вопрос в синхронизации. ты не можешь анализировать ту память, что меняется
Казалось бы, бежишь по списку глобальных объектов. Из каждого объекта забегаешь в другой объект, предварительно заблокировав его и всё поддерево. Потом так же по стеку. Зачем прям вообще все останавливать?