Скорее всего проблема в архитектуре решения раз куча так интенсивно фрагментируется. В большинстве задач на МК захват памяти из кучи достаточно редкое явление. Ну и экономия тактов в ущерб надежности кода всегда достаточно спорное решение.
проблема в том, что хттп-клиент принимает данные блоками по 512 байт. каждый раз при приёме следующего блока приходится выделять память под новый размер, копировать старое содержимое, добавлять пришедшее новое, освобождать старый участок. хттп запросы идут к нескольким разным сервисам, одни возвращают пару сотен байт, а вот ответ прогноза погоды возвращает под 20 килобайт — это всё читается вот так вот блоками по 512. затем парсится джейсон, который тоже динамически выделяет себе структуры нужные, он довольно развесистый с массивами объектов — всё это создаёт много мелких объектов на куче. можно ли оптимальнее? ну, наверное можно, но проблему сначала же надо получить, и только после этого решать.