你要高薪,更要深入-逃逸分析
什么是逃逸
从栈(Stack)上跑到堆(Heap)上
什么情况下要逃逸
变量太大
栈针回收以后,继续使用的变量
逃逸方式
指针逃逸
函数返回的是对象的指针。
1 | package main |
上面代码,如果不是返回的指针,只是一个普通的Int,那么,函数会从栈中弹出,返回,但是由于escapeHeap01()调用后,返回一个指针,也就是指向了局部变量的地址,所以会逃逸到Heap上。
空接口逃逸
因为空接口作为参数,函数内部会调用反射,要查看实参的类型,反射要求变量要求在heap上,所以要逃逸。
1 | func escapeHeap02() { |
大变量逃逸
大于64k变量算大变量,一般会逃逸,缓解栈空间不足的问题。
调用方法嵌套过多
调用方法嵌套过多,导致栈空间不足,可以进行栈扩容,调用morestack()。
如何学习Go语言微服务,快速步入架构师
添加微信 | 公众号更多内容 |
---|---|
本博客所发布的内容,部分内容来源于网络,版权归原作者所有,如有侵权,请联系删除。转载请注明来自 面向加薪学习!