Арена команд
Пакет arena предоставляет возможность выделять память для коллекции значений Go и безопасно освобождать это пространство вручную все сразу. Цель этой функциональности – повысить эффективность: ручное освобождение памяти перед сборкой мусора откладывает этот цикл. Меньшая частота циклов означает, что затраты ЦП сборщика мусора возникают реже.
Эта функциональность в данном пакете в основном реализована в типе Arena. Арены выделяют большие блоки памяти для значений Go, поэтому они, вероятно, будут неэффективны для выделения небольшого количества небольших значений Go. Лучше всего их использовать в больших объёмах, порядка МБ выделенной памяти при каждом использовании.
Обратите внимание, что, позволяя этот ограниченный вид ручного выделения памяти, возможны ошибки use-after-free с обычными значениями Go. Этот пакет ограничивает влияние этих ошибок use-after-free, предотвращая повторное использование освобожденных областей памяти до тех пор, пока сборщик мусора не сможет определить, что это безопасно. Обычно ошибка use-after-free приводит к сбою и полезному сообщению об ошибке, но этот пакет оставляет за собой право не принуждать сбой при освобождении памяти. Это означает, что допустимая реализация этого пакета – просто выделять всю память так, как это обычно делает среда выполнения, и, фактически, он оставляет за собой право время от времени так делать для некоторых значений Go.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/arena/