0%

Go性能优化

Go语言性能优化

性能优化方向

切片

  • 尽可能在使用 make()初始化切片时提供容量信息

  • 使用copy代替re-slice操作

    原因:在已经有的切片基础上创建切片,不会创建新的底层数组,当原切片较大,代码在原切片基础上新建小切片,导致原底层数组在内存中有引用,得不到释放,导致大内存未释放问题

map

  • 预先分配内存

    原因:不断向map中添加元素会触发map的扩容,提前分配好内存可以减少内存拷贝和Rehash的消耗。

字符串处理方式

  • 使用strings.Builder处理字符串

    原因:字符串在go语言是不可变类型,占用内存大小是固定的。使用+每次会重新分配内存。

空结构体

使用空结构体节省内存,空结构体实例不占据任何内存空间。可作为各种场景下的占位符。

atomic包

使用atomic包的性能要比加锁性能提高的多。

锁的实现是通过操作系统实现的,atomic是通过硬件实现的。

性能分析工具pprof