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

Функция runtime.ReadMemStats

Функция runtime.ReadMemStats заполняет переданную в нее структуру типа runtime.MemStats информацией о выделенной памяти и работе сборщика мусора. Она принимает указатель на структуру и записывает в нее данные о текущем состоянии памяти. Функция приостанавливает выполнение программы на время сбора статистики, чтобы получить согласованные показатели. Используйте эту функцию для мониторинга, отладки или создания инструментов профилирования.

Синтаксис

runtime.ReadMemStats(&stats)

Пример

Получение базовой информации о выделенной памяти:

package main import ( "fmt" "runtime" ) func main() { var stats runtime.MemStats runtime.ReadMemStats(&stats) fmt.Printf("Alloc: %v bytes\n", stats.Alloc) fmt.Printf("TotalAlloc: %v bytes\n", stats.TotalAlloc) fmt.Printf("NumGC: %v\n", stats.NumGC) }

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

"Alloc: 188928 bytes" "TotalAlloc: 188928 bytes" "NumGC: 0"

Пример

Получение статистики сборщика мусора и времени пауз:

package main import ( "fmt" "runtime" "time" ) func main() { var stats runtime.MemStats runtime.ReadMemStats(&stats) fmt.Printf("GC pause total: %v ns\n", stats.PauseTotalNs) fmt.Printf("Number of GC cycles: %v\n", stats.NumGC) if stats.NumGC > 0 { lastPause := stats.PauseNs[(stats.NumGC-1)%256] fmt.Printf("Last GC pause: %v ns\n", lastPause) } }

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

"GC pause total: 0 ns" "Number of GC cycles: 0"

Пример

Получение информации о куче и количестве выделенных объектов:

package main import ( "fmt" "runtime" ) func main() { var stats runtime.MemStats runtime.ReadMemStats(&stats) fmt.Printf("HeapAlloc: %v bytes\n", stats.HeapAlloc) fmt.Printf("HeapObjects: %v\n", stats.HeapObjects) fmt.Printf("HeapInUse: %v bytes\n", stats.HeapInuse) }

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

"HeapAlloc: 188928 bytes" "HeapObjects: 0" "HeapInUse: 1310720 bytes"

Пример

Использование ReadMemStats для сравнения использования памяти до и после выделения:

package main import ( "fmt" "runtime" ) func main() { var stats runtime.MemStats runtime.ReadMemStats(&stats) before := stats.Alloc // Создаем срез для демонстрации data := make([]byte, 1024*1024) // 1 MB for i := range data { data[i] = byte(i % 256) } runtime.ReadMemStats(&stats) after := stats.Alloc fmt.Printf("Memory before: %v bytes\n", before) fmt.Printf("Memory after: %v bytes\n", after) fmt.Printf("Difference: %v bytes\n", after-before) }

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

"Memory before: 188928 bytes" "Memory after: 1296832 bytes" "Difference: 1107904 bytes"

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

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