| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package runtime |
| |
| import "unsafe" |
| |
| type MemStatsType struct { |
| // General statistics. |
| // Not locked during update; approximate. |
| Alloc uint64 // bytes allocated and still in use |
| TotalAlloc uint64 // bytes allocated (even if freed) |
| Sys uint64 // bytes obtained from system (should be sum of XxxSys below) |
| Lookups uint64 // number of pointer lookups |
| Mallocs uint64 // number of mallocs |
| Frees uint64 // number of frees |
| |
| // Main allocation heap statistics. |
| HeapAlloc uint64 // bytes allocated and still in use |
| HeapSys uint64 // bytes obtained from system |
| HeapIdle uint64 // bytes in idle spans |
| HeapInuse uint64 // bytes in non-idle span |
| HeapObjects uint64 // total number of allocated objects |
| |
| // Low-level fixed-size structure allocator statistics. |
| // Inuse is bytes used now. |
| // Sys is bytes obtained from system. |
| StackInuse uint64 // bootstrap stacks |
| StackSys uint64 |
| MSpanInuse uint64 // mspan structures |
| MSpanSys uint64 |
| MCacheInuse uint64 // mcache structures |
| MCacheSys uint64 |
| BuckHashSys uint64 // profiling bucket hash table |
| |
| // Garbage collector statistics. |
| NextGC uint64 |
| PauseTotalNs uint64 |
| PauseNs [256]uint64 // most recent GC pause times |
| NumGC uint32 |
| EnableGC bool |
| DebugGC bool |
| |
| // Per-size allocation statistics. |
| // Not locked during update; approximate. |
| // 61 is NumSizeClasses in the C code. |
| BySize [61]struct { |
| Size uint32 |
| Mallocs uint64 |
| Frees uint64 |
| } |
| } |
| |
| var sizeof_C_MStats uintptr // filled in by malloc.goc |
| |
| func init() { |
| if sizeof_C_MStats != unsafe.Sizeof(MemStats) { |
| println(sizeof_C_MStats, unsafe.Sizeof(MemStats)) |
| panic("MStats vs MemStatsType size mismatch") |
| } |
| } |
| |
| // MemStats holds statistics about the memory system. |
| // The statistics may be out of date, as the information is |
| // updated lazily from per-thread caches. |
| // Use UpdateMemStats to bring the statistics up to date. |
| var MemStats MemStatsType |
| |
| // UpdateMemStats brings MemStats up to date. |
| func UpdateMemStats() |
| |
| // GC runs a garbage collection. |
| func GC() |