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