内存逃逸
什么是内存逃逸:
函数内部分配了一个变量或对象,并且该对象或变量在函数结束后仍然存在,这时就认为这个变量或对象是从函数中逃逸出去了
.
这时编译器会将该变量或对象分配到堆上,而不是栈上。
为什么会关心内存逃逸:
性能优化:影响GC
代码优化:若无或少,便于理解代码逻辑,可提高可维护性
如何查看内存逃逸
可以使用 -gcflags
,查看什么变量逃逸到了堆上
1 |
|
如何避免内存逃逸:
- 使用值传递
- 避免闭包
- 预分配内存
go 中的引用类型
slice map channel func interface