Хм, ГХ обычно выполняется только тогда, когда в этом есть необходимость. Попробуйте отладить код, чтобы увидеть, что может использовать столько памяти. В кучи не должно быть достаточно памяти для выполнения выделения.
Любопытно, вы используете сокеты для этого типа приложений? Я слышал, где интерфейсное приложение, написанное на Android в Java, подключается через сокет к внутреннему серверу (не «Сервис», в терминах Android), написанному на C. Во время стресс-тестирования сервер был убит, чтобы увидеть как приложение будет реагировать. Когда это произошло, устройство залило журнал с такой ошибкой. Это произошло потому, что существовал отдельный поток, который запускался после подключения, и он отправлял запрос данных, ожидая получить что-то обратно от сервера, которого больше не было.
Возможно, ваше приложение или веб-сервер считают, что оно все еще подключено, запущен процесс, который пытается отправить / получить данные, или что-то подобное.