Go语言 GC优化经验分享
来源:互联网 发布:手机屏幕条纹修复软件 编辑:程序博客网 时间:2024/04/30 18:20
gc13(1): 308+92+1 ms , 156 -> 107 MB 3339834 -> 1659922 (12850245-11190323) objects, 0(0) handoff, 0(0) steal, 0/0/0 yields
gc14(6): 16+15+1 ms, 75 -> 37 MB 1409074 -> 126097 (10335326-10209229) objects, 45(1913) handoff, 34(4823) steal, 455/283/52 yields
// 玩家数据表的集合type tables struct { tableA *tableA tableB *tableB tableC *tableC // ...... 此处省略一大堆表}// 每个玩家只会有一条tableA记录type tableA struct { fieldA int fieldB string}// 每个玩家有多条tableB记录type tableB struct { xxoo int ooxx int next *tableB // 指向下一条记录}// 每个玩家只有一条tableC记录type tableC struct { id int value int64}
// 玩家数据表的集合type tables struct { tableA tableA tableB []tableB tableC tableC // ...... 此处省略一大堆表}// 每个玩家只会有一条tableA记录type tableA struct { _is_nil bool fieldA int fieldB string}// 每个玩家有多条tableB记录type tableB struct { _is_nil bool xxoo int ooxx int}// 每个玩家只有一条tableC记录type tableC struct { _is_nil bool id int value int64}
一对一表用结构体,一对多表用slice,每个表都加一个_is_nil的字段,用来表示当前的数据是否是有用的数据。
这样修改的结果就是,一万个玩家,产生的对象总量是 1w (tables) + 1w ([]tablesB),跟之前的设计差别很明显。
但是slice不会收缩,而结构体则是一开始就占了内存,所以修改后会导致内存消耗增大。
参考链接:
go的gc代码,scanblock等函数都在里面:
http://golang.org/src/pkg/runtime/mgc0.c
go的runtime包文档有对GOGCTRACE等关键的几个环境变量做说明:
http://golang.org/pkg/runtime/
如何使用cpuprof和memprof,请看《Profiling Go Programs》:
http://blog.golang.org/profiling-go-programs
我做的一些小试验代码,优化都是基于这些试验的数据的,可以参考下:
https://github.com/realint/labs/tree/master/src
0 0
- Go语言 GC优化经验分享
- [转]Go程序GC优化经验分享
- Go程序GC优化经验分享
- go 语言 gc 问题
- sql优化经验分享
- GO语言学习 一些经验
- go语言学习笔记分享
- GlassFish v3 优化经验分享
- 互联网产品优化经验分享
- 互联网产品优化经验分享
- MySQL性能优化经验分享
- Unity内存优化经验分享
- 经验分享之数据库优化
- 分享学习语言的经验
- Go语言代码自动更新服务器代码分享
- Go语言 如果查询度量内存和GC使用状况
- 5张图看尽Go语言GC的演变史
- 5张图看尽Go语言GC的演变史
- 黑马程序员_学习笔记第17天——IO流、字符流
- NYOJ 155高精度计算
- 系统测试和集成测试的区别
- Computer - Win7隐藏计算机中收藏夹和库
- 微动态更好的将微信与微博结合起来
- Go语言 GC优化经验分享
- 添加硬盘驱动 - 写磁盘
- PHP程序编码规范
- java文本框中读取回车
- 黑马程序员_学习笔记第18天——缓冲区、转换流、字节流
- android问题:Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
- linux find命令详解
- NYOJ 655光棍的yy
- Hadoop2.4.0环境搭建常见问题解答(虚拟机,ubuntu系统)