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程都退出了,程序就会崩溃。
posted @ 2024-06-13 22:06  Jeff的技术栈  阅读(8)  评论(0编辑  收藏  举报
回顶部