РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1552 of 1593 menu

Функция runtime.GC

Функция runtime.GC выполняет принудительный запуск сборщика мусора. В нее не передается никаких параметров. Вызов этой функции блокирует выполнение программы до тех пор, пока сборка мусора не будет завершена. Обычно сборщик мусора работает автоматически, но в некоторых случаях, например, перед выполнением критичных по времени операций или при необходимости освободить память перед измерением ее использования, может потребоваться его принудительный вызов.

Синтаксис

runtime.GC()

Пример

Давайте создадим программу, которая выделяет память под слайс, а затем принудительно запускает сборщик мусора:

package main import ( "fmt" "runtime" "time" ) func main() { // Создаем слайс из 1000 элементов sl := make([]int, 1000) for i := range sl { sl[i] = i } // Запоминаем информацию о памяти до сборки var m runtime.MemStats runtime.ReadMemStats(&m) fmt.Printf("До сборки: Alloc = %v MiB", m.Alloc/1024/1024) // Запускаем сборщик мусора runtime.GC() time.Sleep(100 * time.Millisecond) // Даем время на сборку // Получаем информацию после сборки runtime.ReadMemStats(&m) fmt.Printf("\nПосле сборки: Alloc = %v MiB", m.Alloc/1024/1024) }

Результат выполнения кода (значения могут отличаться в зависимости от системы):

"До сборки: Alloc = 0 MiB" "После сборки: Alloc = 0 MiB"

Пример

Рассмотрим ситуацию, когда после создания большого количества объектов мы хотим принудительно освободить память перед выполнением новой задачи:

package main import ( "fmt" "runtime" "time" ) func main() { // Создаем много временных объектов for i := 0; i < 1000; i++ { _ = make([]byte, 1024*1024) // Создаем слайс размером 1 МБ } // Запускаем сборщик мусора принудительно start := time.Now() runtime.GC() elapsed := time.Since(start) fmt.Printf("Время выполнения сборки мусора: %v", elapsed) }

Результат выполнения кода:

"Время выполнения сборки мусора: 2.5ms"

Пример

Покажем, что вызов runtime.GC запускает сборку мусора в соответствии с текущими настройками (параллельно, если поддерживается):

package main import ( "fmt" "runtime" ) func main() { // Выводим информацию о сборщике мусора до запуска fmt.Println("Запуск сборщика мусора...") // Принудительный запуск runtime.GC() fmt.Println("Сборщик мусора завершил работу") }

Результат выполнения кода:

"Запуск сборщика мусора..." "Сборщик мусора завершил работу"

Смотрите также

  • функцию runtime.GOMAXPROCS,
    которая управляет количеством процессоров для выполнения
  • функцию runtime.ReadMemStats,
    которая возвращает статистику использования памяти
  • функцию runtime.KeepAlive,
    которая предотвращает сборку объекта сборщиком мусора
  • функцию runtime.SetFinalizer,
    которая устанавливает финализатор для объекта
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить