当前位置: 首页 > java >正文

GO——内存逃逸分析

一、可能导致逃逸的5中情况

package mainimport "fmt"func main() {f1()f2()f3()f4()f5()
}type animal interface {run()
}type dog struct{}func (d *dog) run() {fmt.Println("狗在跑")
}// 指针、map、切片为返回值的会发生内存逃逸
func f1() (*int, map[int]int, []int) {i := 1list := []int{1, 2, 3}m := map[int]int{1: 1, 2: 2, 3: 3}return &i, m, list
}// 向chan中发送指针的数据时,会发生逃逸
func f2() {i := 2ch := make(chan *int, 2)ch <- &i<-ch
}// 闭包引用外部变量时,会发生逃逸
func f3() func() {i := 3return func() {fmt.Println(i)}
}// 在map、切片中包含指针的值时,会发生逃逸
func f4() {i := 1list := make([]*int, 2)list[0] = &i
}// interface类型多态的应用,可能会导致逃逸
// 由于接口类型可以持有任意实现了该接口的类型,编译器在编译时无法确定具体的动态类型
// 因此,为了保证程序的正确性,在运行时需要将接口对象分配到堆上
func f5() {var a animal = &dog{}a.run()var b animalb = &dog{}b.run()
}

二、对逃逸进行分析

go build -gcflags -m ./main.go 

在这里插入图片描述

http://www.xdnf.cn/news/9401.html

相关文章:

  • Flutter、React Native、Unity 下的 iOS 性能与调试实践:兼容性挑战与应对策略(含 KeyMob 工具经验)
  • 云服务器是什么,和服务器有什么区别?
  • 系统赛数据库的一些记录
  • 【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用
  • flutter简单自定义跟随手指滑动的横向指示器
  • Django数据库连接报错 django.db.utils.NotSupportedError: MySQL 8 or later is required
  • 代码输出题:异步事件循环
  • Spring boot 策略模式
  • YOLOv5 详解:从原理到实战的全方位解析
  • 35. 自动化测试开发之使用oracle连接池实现oracle数据库操作
  • 34. 自动化测试开发之使用mysql异步连接池实现mysql数据库操作
  • 碰一碰系统源码搭建
  • DH加密详解
  • 什么是PLM系统?PLM主要功能有哪些?2025主流PLM系统介绍
  • 第五十五节:综合项目实践-实时人脸美化滤镜
  • 三轴云台之积分分离PID控制算法篇
  • 【通关文件操作(上)】--文件的意义和概念,二进制文件和文本文件,文件的打开和关闭,文件的顺序读写
  • 鸿蒙运动开发实战:打造 Keep 式轨迹播放效果
  • Java Stream API 终止操作的详细解析
  • QML之Canvas
  • 数组名的大小理解
  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • CarPropertyService 介绍
  • 【FAQ】spring boot 3 集成 nacos
  • pgsql 查看每张表大小
  • 创建vue项目
  • 3D Web轻量化引擎HOOPS Communicator实时协作功能深度解析
  • 小黑黑大模型应用日常摸索中:初次使用langchain智能体调用工具,准备继续深入
  • 题解——相交链表(力扣160 easy)
  • Java研学-MybatisPlus(三)