Golang内存逃逸引发的面试考察点

Golang内存逃逸引发的面试考察点

什么是内存逃逸?

在go语言中每个goroutine都会有一个自己的栈区,每个栈区呢又会对应多个栈帧,每个栈帧就会对应一个函数,这个栈帧就是用来存储函数的局部变量、入参、返回地址等等。这些变量就会随着函数的运行结束而自动销毁。编译期会对相关变量会做一个分析,有些场景下变量就不会存入到栈帧而是会分配到堆上面,这个过程就是逃逸分析。

逃逸分析有什么作用?

帮助编译器优化内存分配和回收效率

哪些场景下会发生逃逸呢?

  • 函数返回局部变量的指针
  • 函数指针类型的入参
  • 闭包访问的函数外部变量
  • 动态变量类型
  • 变量大小不确定时
  • 栈空间不足存放变量内存时

有什么办法可以确认变量是否发生逃逸?

通过 go run -gcflags="-m -m" you_file.go 命令 PS:go run 和 go build都可以

堆栈分别有什么特点

  • 栈是一种自动分配和释放内存的数据结构,用于保存函数的局部变量、函数参数和函数调用返回时的临时数据
  • 栈的分配和释放速度非常快,因为它只需要简单移动下栈指针
  • 栈的大小在编译器就确定了且是固定不可改变的
  • 栈上的变量的生命周期是与其对应函数的相对应的
  • 栈上的内存是有限的并且是线程私有的不会存在并发访问问题
  • 栈上存储的数据大小通常比较小,适用于存储基本数据类型和短期临时变量

  • 堆是动态分配的内存区域,用于存储程序运行时动态创建的数据结构体和对象等
  • 堆的分配和释放稍微慢一点,因为需要在堆上进行复杂的内存管理操作,例如三色标记
  • 堆的大小通常比较大,取决于运行时的需求,它的生命周期可以比较长
  • 堆上的内存需要手动进行释放,不然会造成内存泄露
  • 堆上的数据可以被多个线程共享,因此需要在并发访问时进行加锁
  • 堆适用于存储大量数据或者需要动态扩展的数据结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中GTID在主从复制机制中的作用

在数据库的世界里,数据的一致性和高可用性是任何大型应用都必须考虑的问题。尤其对于那些依赖数据库做主要存储的系统来说,如何保障数据库服务在面对故障时依然能稳定运行并保证数据不丢失,是每个数据库管理员(DBA)需要…

Java项目:12 Springboot的垃圾回收管理系统

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类&#x…

解读IP风险画像标签:深度洞察网络安全

在当今数字化的世界中,网络安全成为企业和个人关注的焦点。IP风险画像标签作为网络安全的利器,扮演着深度洞察网络风险的角色。本文将深入解读IP风险画像标签,揭示其在网络安全领域的重要性和功能。 1. IP风险画像标签是什么? I…

Jmeter-解析返回参数-解析并操作json

工作中经常会遇到JSON字符串,接口的入参和返回参数也多数是JSON格式,自动化项目中常需要写脚本处理返回结果,本文总结java或jmeter的beanshell脚本中对于json的常用操作 json字符串的格式 简单的JSON字符串:{“key”:“value”,“…

【服务器数据恢复】EqualLogic存储磁盘坏道导致存储不可用的数据恢复案例

服务器数据恢复环境&故障: 某公司IT部门一台某品牌EqualLogic PS6100系列存储在运行过程中突然崩溃。 服务器管理员对故障服务器存储进行初步检查,经过检测发现导致该服务器存储无法正常工作的原因是该存储中raid5磁盘阵列内有2块硬盘出现故障离线&a…

数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 cv2.setWindowProperty(windowsName, prop_id, prop_value) 参数: ①

ubuntu 挂载磁盘

Linux(ubuntu) 挂载磁盘_ubuntu挂载硬盘-CSDN博客 ls -l /dev/disk/by-uuid/sudo vim /etc/fstab UUID269cfb7f-d7eb-4b1c-b33a-8bf26b878bd7 /home/mi/data ext4 defaults 0 0 UUIDcaa7d4db-82d1-40a5-8df6-0f77818b393e /home/mi/ssd ext4 default…

UI 自动化测试框架:PO 模式+数据驱动

1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与…

Nodejs--Linux环境安装及配置

一、下载安装包 (1)通过命令uname -a 查看Linux系统版本。 (2)打开官网下载地址: https://www.nodejs.com.cn/ 选择对应的版本下载安装包。 (3)将下载好的安装包传到Linux对应目录进行解压。…

想要透明拼接屏展现更加效果,视频源是技术活,尤其作为直播背景

随着科技的飞速发展,视频制作和显示技术也在不断进步。透明拼接屏视频作为一种新型的视频形式,在许多场合都得到了广泛的应用。尼伽小编将深入探讨透明拼接屏视频的制作过程、要求、清晰度,以及目前常作为直播背景的优势。 一、透明拼接屏视频…

【自然语言处理】【深度学习】NLP中的N-gram理解

N-gram是自然语言处理(NLP)中的一个概念,它描述的是文本中连续的n个项(通常是单词或字符)。这个概念主要用于语言建模和文本分析中。 具体来说: Unigram (1-gram): 包含一个单词的序列,例如句子…

力扣hot100 两两交换链表中的节点 双指针

Problem: 24. 两两交换链表中的节点 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { …

国民技术N32G430C8开发笔记二-UART驱动开发

参考demo E:\tfs\data\smartsafe\N32G430\Nations.N32G430_Library.1.0.0\projects\n32g430_EVAL\examples\USART\Interrupt开发uart1和uart3驱动。Uart1用于通信,uart3用于调试。 参考用户手册5.2.5复用功能。Uart1_tx引脚使用PA9,重映射使用AF5&#x…

Flink状态应用测试程序示例

Flink状态应用测试程序示例 1. 创建执行环境 // 1. 创建执行环境StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1); 2. 创建数据流 // 2. 创建数据流DataStream<Tuple2<String, Integer>> inputSt…

SpringMVC第二天

今日内容 能够掌握SSM整合的流程 能够编写SSM整合功能模块类 能够使用Result统一表现层响应结果 能够编写异常处理器进行项目异常 能够完成SSM整合前端页面发送请求实现增删改查操作 能够编写拦截器并配置拦截器 一、SSM整合【重点】 1 SSM整合配置 问题导入 请描述“SSM整…

加速应用开发:低代码云SaaS和源码交付模式如何选

随着数字化转型的加速&#xff0c;企业对于快速开发和交付高质量应用的需求也越来越迫切。为了满足这一需求&#xff0c;开发者们开始探索采用低代码平台进行软件开发工作&#xff0c;以加速应用开发过程。 目前&#xff0c;市场上的低代码产品众多&#xff0c;但基本可分为简单…

黑马Java——面向对象进阶(static继承)

1.static静态变量 静态变量是随着类的加载而加载的&#xff0c;优先与对象出现的

大模型面试题总结

文章目录 一、大模型(LLMs)基础面二、大模型(LLMs)进阶面三、大模型(LLMs)微调面四、大模型(LLMs)langchain面1. 基于LLM+向量库的文档对话 基础面2. 基于LLM+向量库的文档对话 优化面3. LangChain的概念面试问题4.LangChain的一些模块提问5.LangChain的业务提问6.Lang…

写一份简单的产品说明书:格式和排版建议

现在的市场竞争那么激烈&#xff0c;拥有一份简洁明了的产品说明书可以说是很重要的。产品说明书不仅向用户提供了对产品的详细了解&#xff0c;还能够树立品牌形象&#xff0c;提升用户体验。 | 一、写一份简单的产品说明书—一些建议 1.创意封面设计 一个吸引人的封面设计能…

Kong工作原理 - 代理参考 (Proxy Reference)

在本文档中&#xff0c;我们详细介绍了Kong Gateway的代理功能&#xff0c;包括其路由能力和内部工作原理。 Kong Gateway提供了一些接口&#xff0c;可以通过以下配置属性进行调整&#xff1a; proxy_listen&#xff0c;定义了Kong Gateway将接受来自客户端的公共HTTP&#…