github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/runtime/mem.go (about)

     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  
     5  package runtime
     6  
     7  import "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.
    13  type 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  
    59  var sizeof_C_MStats uintptr // filled in by malloc.goc
    60  
    61  var memStats MemStats
    62  
    63  func init() {
    64  	if sizeof_C_MStats != unsafe.Sizeof(memStats) {
    65  		println(sizeof_C_MStats, unsafe.Sizeof(memStats))
    66  		panic("MStats vs MemStatsType size mismatch")
    67  	}
    68  }
    69  
    70  // ReadMemStats populates m with memory allocator statistics.
    71  func ReadMemStats(m *MemStats)
    72  
    73  // GC runs a garbage collection.
    74  func GC()