Функция 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,
которая управляет количеством используемых процессоров