Go 语言性能调优-逃逸分析

逃逸分析是由编译器决定内存分配的位置,函数中申请一个新的对象

分配在栈中:则函数执行结束可自动将内存回收;

分配在堆中:则函数执行结束可交给GC(垃圾回收)处理;

逃逸分析在编译阶段完成

如何查看编译

通过编译参数-gcflag=-m可以查看编译过程中的逃逸分析

逃逸策略

函数中申请新的对象,编译器会跟据该对象是否被函数外部引用来决定是否逃逸:

1. 如果函数外部没有引用,则优先放到栈中;

2. 如果函数外部存在引用,则必定放到堆中;

注意,对于函数外部没有引用的对象,也有可能放到堆中,比如内存过大超过栈的存储能力栈空间不足逃逸。

逃逸场景

1,指针逃逸

2,栈空间不足逃逸

3 ,动态类型逃逸

4,闭包引用对象逃逸

逃逸总结

栈上分配内存比在堆中分配内存有更高的效率

栈上分配的内存不需要GC处理

堆上分配的内存使用完毕会交给GC处理

逃逸分析目的是决定内分配地址是栈还是堆

逃逸分析在编译阶段完成

参考:《go专家编程》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值