🔴 Сложный · 3 очк. Go runtime
Что такое memory ballast и зачем его использовали до Go 1.19?
A Аллокация большого неиспользуемого массива, чтобы GC считал живую память больше и запускался реже
B Кеш для частых аллокаций
C Пул горутин для экономии памяти
D Буфер для сетевых операций
Объяснение вопроса

Memory ballast - хак, применявшийся до Go 1.19. Идея: аллоцировать большой []byte и держать на него ссылку. GC считает его "живым" и реже запускает цикл сборки.

func main() {
    // Ballast: GC думает, что живой памяти ~1 GiB
    // и запускается реже (при GOGC=100 - при ~2 GiB)
    ballast := make([]byte, 1<<30) // 1 GiB
    _ = ballast // держим ссылку

    // ... основная логика
}

Проблемы ballast: занимает виртуальную память, неточен, неочевиден для новых разработчиков.

GOMEMLIMIT (Go 1.19+) полностью заменил этот паттерн: он напрямую сообщает GC лимит памяти без необходимости аллоцировать мертвые данные.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.