market.SubscribeBestBidOfferResponse{}
err := json.Unmarshal([]byte(msg), &result)
return result, err
}
Вопрос по куче. Есть во такой вот метод. Тут создаётся структура market.SubscribeBestBidOfferResponse в стеке. Далее она по ссылке передаётся в json.Unmarshal.
По идея, тут нигде нет утечки в кучу. Или есть при передачи в анмаршал?
Но тут ещё одна загвоздка. Возвращаемый параметр interface{}. При передачи result как структуры в стеке туда не случается ли утечка в кучу из-за особенности interface{}?
Этот участок кода в одной из библиотек обрабатывает очень высоконагруженное место в веб-соккетах.
И профилировщик показывает тут одно из самых крупных “засерателей” кучи, хотя по сути цель метода конвертировать данных из соккетов в структуру пакета и отдать выше на обработку.
Класть данные от этого огромного потока в кучу нет никакого смысла, но почему-то это происходит тут.
конечно есть. Вы передаёте указатель в другую функцию
Т.е. Unmarshal гарантировано отправить в кучу данные?
это же легко проверить бенчмарком за пару минут 😀
и да, скорее всего отправит
json.Unmarshal не стоит использовать в hot path'е лучше использовать кодогенератор для конкретной структуры
Так так так.... Очень интересно, а можно поподробнее? Ссылочку какую-нибудь?)
попробуйте https://github.com/mailru/easyjson и было бы интересно узнать результаты бенчмарков по сравнению с encoding/json 😉
Обсуждают сегодня