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 (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 GCSys uint64 // GC metadata 41 OtherSys uint64 // other system allocations 42 43 // Garbage collector statistics. 44 NextGC uint64 // next run in HeapAlloc time (bytes) 45 LastGC uint64 // last run in absolute time (ns) 46 PauseTotalNs uint64 47 PauseNs [256]uint64 // circular buffer of recent GC pause times, most recent at [(NumGC+255)%256] 48 PauseEnd [256]uint64 // circular buffer of recent GC pause end times 49 NumGC uint32 50 GCCPUFraction float64 // fraction of CPU time used by GC 51 EnableGC bool 52 DebugGC bool 53 54 // Per-size allocation statistics. 55 // 61 is NumSizeClasses in the C code. 56 BySize [61]struct { 57 Size uint32 58 Mallocs uint64 59 Frees uint64 60 } 61} 62 63var Sizeof_C_MStats uintptr // filled in by malloc.goc 64 65func init() { 66 var memStats MemStats 67 if Sizeof_C_MStats != unsafe.Sizeof(memStats) { 68 println(Sizeof_C_MStats, unsafe.Sizeof(memStats)) 69 panic("MStats vs MemStatsType size mismatch") 70 } 71} 72 73// ReadMemStats populates m with memory allocator statistics. 74func ReadMemStats(m *MemStats) 75 76// GC runs a garbage collection. 77func GC() 78