runtime包
目录
runtime包
返回Go的根目录--GOROOT
fmt.Println(runtime.GOROOT()) //返回Go的根目录
返回Go的版本--Version
fmt.Println(runtime.Version()) //返回Go的版本字符串
返回本地机器的逻辑CPU个数--NumCPU
fmt.Println(runtime.NumCPU()) //返回本地机器的逻辑CPU个数
设置可同时执行的最大CPU数--GOMAXPROCS
fmt.Println(runtime.GOMAXPROCS(5)) //设置可同时执行的最大CPU数
手动GC--GC
runtime.GC() //手动GC执行一次垃圾回收。
统计内存申请和分配信息--ReadMemStats
type MemStats struct {
// 一般统计
Alloc uint64 // 已申请且仍在使用的字节数
TotalAlloc uint64 // 已申请的总字节数(已释放的部分也算在内)
Sys uint64 // 从系统中获取的字节数(下面XxxSys之和)
Lookups uint64 // 指针查找的次数
Mallocs uint64 // 申请内存的次数
Frees uint64 // 释放内存的次数
// 主分配堆统计
HeapAlloc uint64 // 已申请且仍在使用的字节数
HeapSys uint64 // 从系统中获取的字节数
HeapIdle uint64 // 闲置span中的字节数
HeapInuse uint64 // 非闲置span中的字节数
HeapReleased uint64 // 释放到系统的字节数
HeapObjects uint64 // 已分配对象的总个数
// L低层次、大小固定的结构体分配器统计,Inuse为正在使用的字节数,Sys为从系统获取的字节数
StackInuse uint64 // 引导程序的堆栈
StackSys uint64
MSpanInuse uint64 // mspan结构体
MSpanSys uint64
MCacheInuse uint64 // mcache结构体
MCacheSys uint64
BuckHashSys uint64 // profile桶散列表
GCSys uint64 // GC元数据
OtherSys uint64 // 其他系统申请
// 垃圾收集器统计
NextGC uint64 // 会在HeapAlloc字段到达该值(字节数)时运行下次GC
LastGC uint64 // 上次运行的绝对时间(纳秒)
PauseTotalNs uint64
PauseNs [256]uint64 // 近期GC暂停时间的循环缓冲,最近一次在[(NumGC+255)%256]
NumGC uint32
EnableGC bool
DebugGC bool
// 每次申请的字节数的统计,61是C代码中的尺寸分级数
BySize [61]struct {
Size uint32
Mallocs uint64
Frees uint64
}
}
m := runtime.MemStats{}
runtime.ReadMemStats(&m)
fmt.Println(m)
返回正在使用的字节数--InUseBytes
m := runtime.MemProfileRecord{}
fmt.Println(m.InUseBytes()) //返回正在使用的字节数
返回正在使用的对象数--InUseObjects
m := runtime.MemProfileRecord{}
fmt.Println(m.InUseObjects()) //返回正在使用的对象数
返回当前存在的Go协程数--NumGoroutine
fmt.Println(runtime.NumGoroutine()) //返回当前存在的Go协程数
终止调用它的go程--Goexit
runtime.Goexit()
Goexit终止调用它的go程。其它go程不会受影响。Goexit会在终止该go程前执行所有defer的函数。
在程序的main go程调用本函数,会终结该go程,而不会让main返回。因为main函数没有返回,程序会继续执行其它的go程。如果所有其它go程都退出了,程序就会崩溃。
选择了IT,必定终身学习