go runtime.States

go runtime.States

package main

import (
	"log"
	"runtime"
	"time"
)

/*----------------------------------runtime.MemStats字段含义-------------------------------
1、Alloc uint64 //golang语言框架堆空间分配的字节数
2、TotalAlloc uint64 //从服务开始运行至今分配器为分配的堆空间总 和,只有增加,释放的时候不减少
3、Sys uint64 //服务现在系统使用的内存
4、Lookups uint64 //被runtime监视的指针数
5、Mallocs uint64 //服务malloc heap objects的次数
6、Frees uint64 //服务回收的heap objects的次数
7、HeapAlloc uint64 //服务分配的堆内存字节数
8、HeapSys uint64 //系统分配的作为运行栈的内存
9、HeapIdle uint64 //申请但是未分配的堆内存或者回收了的堆内存(空闲)字节数
10、HeapInuse uint64 //正在使用的堆内存字节数
10、HeapReleased uint64 //返回给OS的堆内存,类似C/C++中的free。
11、HeapObjects uint64 //堆内存块申请的量
12、StackInuse uint64 //正在使用的栈字节数
13、StackSys uint64 //系统分配的作为运行栈的内存
14、MSpanInuse uint64 //用于测试用的结构体使用的字节数
15、MSpanSys uint64 //系统为测试用的结构体分配的字节数
16、MCacheInuse uint64 //mcache结构体申请的字节数(不会被视为垃圾回收)
17、MCacheSys uint64 //操作系统申请的堆空间用于mcache的字节数
18、BuckHashSys uint64 //用于剖析桶散列表的堆空间
19、GCSys uint64 //垃圾回收标记元信息使用的内存
20、OtherSys uint64 //golang系统架构占用的额外空间
21、NextGC uint64 //垃圾回收器检视的内存大小
22、LastGC uint64 // 垃圾回收器最后一次执行时间。
23、PauseTotalNs uint64 // 垃圾回收或者其他信息收集导致服务暂停的次数。
24、PauseNs [256]uint64 //一个循环队列,记录最近垃圾回收系统中断的时间
25、PauseEnd [256]uint64 //一个循环队列,记录最近垃圾回收系统中断的时间开始点。
26、NumForcedGC uint32 //服务调用runtime.GC()强制使用垃圾回收的次数。
27、GCCPUFraction float64 //垃圾回收占用服务CPU工作的时间总和。如果有100个goroutine,垃圾回收的时间为1S,那么就占用了100S。
28、BySize //内存分配器使用情况
*/

//读取当前内存信息的方法
func printMemStats() {
	//定义一个 runtime.MemStats对象
	var ms runtime.MemStats

	//通过对象的属性 查询内存的信息
	//1 将内存中的数据加载到 ms对象中
	runtime.ReadMemStats(&ms)

	//2 将ms对象信息打印出来
	log.Printf(
		"====> Alloc:%d(bytes), HeapIdle:%d(bytes), "+
			"HeapReleased:%d(bytes), HeapInuse:%d(bytes), "+
			"GCSys:%d(bytes), Sys:%d(bytes)",
		ms.Alloc, ms.HeapIdle, ms.HeapReleased, ms.HeapInuse, ms.GCSys, ms.Sys,
	)
}

func test() {
	//slice 是一个动态扩容的, 用slice来做堆内存的一个申请
	mySlice := make([]int, 8)

	log.Println(" --> loop begin...")
	for i := 0; i < 32*1000*1000; i++ {
		mySlice = append(mySlice, i)

		if i == 16*1000*1000 {
			printMemStats()
		}
	}
	log.Println(" --> loop end...")
}

func main() {

	log.Println("Start ...")
	printMemStats()
	test()

	//强制调用GC回收
	log.Println("force GC...")
	runtime.GC()

	log.Println("Done..")
	printMemStats()

	//开辟一个协程,定期的打印当前的内存信息
	go func() {
		for {
			printMemStats()
			time.Sleep(10 * time.Second)
		}
	}()

	//主线程 睡眠等待
	select {}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值