1// Copyright 2009 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package runtime 6 7import "unsafe" 8 9// Note: the MemStats struct should be kept in sync with 10// struct MStats in malloc.h 11 12// A MemStats records statistics about the memory allocator. 13type MemStats struct { 14 // General statistics. 15 Alloc uint64 // bytes allocated and still in use 16 TotalAlloc uint64 // bytes allocated (even if freed) 17 Sys uint64 // bytes obtained from system (should be sum of XxxSys below) 18 Lookups uint64 // number of pointer lookups 19 Mallocs uint64 // number of mallocs 20 Frees uint64 // number of frees 21 22 // Main allocation heap statistics. 23 HeapAlloc uint64 // bytes allocated and still in use 24 HeapSys uint64 // bytes obtained from system 25 HeapIdle uint64 // bytes in idle spans 26 HeapInuse uint64 // bytes in non-idle span 27 HeapReleased uint64 // bytes released to the OS 28 HeapObjects uint64 // total number of allocated objects 29 30 // Low-level fixed-size structure allocator statistics. 31 // Inuse is bytes used now. 32 // Sys is bytes obtained from system. 33 StackInuse uint64 // bootstrap stacks 34 StackSys uint64 35 MSpanInuse uint64 // mspan structures 36 MSpanSys uint64 37 MCacheInuse uint64 // mcache structures 38 MCacheSys uint64 39 BuckHashSys uint64 // profiling bucket hash table 40 41 // Garbage collector statistics. 42 NextGC uint64 // next run in HeapAlloc time (bytes) 43 LastGC uint64 // last run in absolute time (ns) 44 PauseTotalNs uint64 45 PauseNs [256]uint64 // circular buffer of recent GC pause times, most recent at [(NumGC+255)%256] 46 NumGC uint32 47 EnableGC bool 48 DebugGC bool 49 50 // Per-size allocation statistics. 51 // 61 is NumSizeClasses in the C code. 52 BySize [61]struct { 53 Size uint32 54 Mallocs uint64 55 Frees uint64 56 } 57} 58 59var Sizeof_C_MStats uintptr // filled in by malloc.goc 60 61var VmemStats MemStats 62 63func init() { 64 if Sizeof_C_MStats != unsafe.Sizeof(VmemStats) { 65 println(Sizeof_C_MStats, unsafe.Sizeof(VmemStats)) 66 panic("MStats vs MemStatsType size mismatch") 67 } 68} 69 70// ReadMemStats populates m with memory allocator statistics. 71func ReadMemStats(m *MemStats) 72 73// GC runs a garbage collection. 74func GC() 75