【Golang 面试 - 进阶题】每日 3 题(十七)
✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
49. GC 触发时机
Go 语言的垃圾回收器采用了自适应的垃圾回收策略,会根据当前程序的运行情况和垃圾回收的历史记录动态地调整垃圾回收的触发时机和策略。在一般情况下,垃圾回收器会在下列情况下触发垃圾回收:
-
内存占用达到阈值:当程序使用的内存超过一定的阈值时,垃圾回收器会被触发,回收无用的内存,以避免进一步的内存占用。
-
分配速率超过阈值:当程序的内存分配速率超过一定的阈值时,垃圾回收器会被触发,回收无用的内存,以避免进一步的内存占用。
-
空闲时间超过阈值:当程序空闲时间超过一定的阈值时,垃圾回收器会被触发,回收无用的内存,以避免内存泄漏。
-
调用 runtime.GC() 函数:程序可以调用 runtime.GC() 函数主动触发垃圾回收。
需要注意的是,Go 语言的垃圾回收器是并发的,因此在程序运行过程中,垃圾回收器可能会随时被触发。此外,Go 语言还提供了一些垃圾回收相关的环境变量和参数,可以用于调整垃圾回收的触发时机和策略。例如,可以通过设置 GOGC 环境变量来调整垃圾回收的阈值,也可以通过设置 GODEBUG 环境变量来查看垃圾回收的相关信息。
50. Go 语言中 GC 的流程是什么?
Go 语言中的垃圾回收是自动的,采用了并发、分代的垃圾回收策略。下面是 Go 语言中垃圾回收的大致流程:
-
标记阶段(Marking Phase):垃圾回收器首先从根对象(如全局变量、栈变量等)出发,标记所有可达的对象,标记完成后,所有未被标记的对象就可以被回收了。
-
清除阶段(Sweeping Phase):在清除阶段,垃圾回收器会遍历整个堆,将未被标记的对象进行回收,并将已回收的内存加入空闲链表,以供下次分配使用。
-
整理阶段(Compacting Phase):在清除阶段结束后,堆中会留下大量不连续的内存碎片,这会影响程序的性能。因此,垃圾回收器会在需要的时候进行整理,将存活的对象移动到一段连续的内存空间中,从而消除内存碎片。
需要注意的是,Go 语言的垃圾回收器是并发的,它可以在程序继续运行的同时进行垃圾回收,不会影响程序的正常运行。此外,Go 语言的垃圾回收器还采用了分代策略,将堆分为多个代,每个代使用不同的回收策略。在每次回收中,垃圾回收器会优先回收较老的对象,从而减少垃圾回收的开销。
51. GC 如何调优
Go 语言的垃圾回收器是自动运行的,它会自动检测堆的大小、活动对象的数量等信息,并根据这些信息来调整垃圾回收的策略和频率。但是,如果应用程序的内存使用模式比较特殊,或者对响应时间、吞吐量等方面有特殊的需求,我们可以通过调整一些参数来优化垃圾回收器的性能。
以下是一些常见的调优方法:
-
GOGC 环境变量:可以通过设置 GOGC 环境变量来调整垃圾回收的频率和策略。GOGC 的默认值是 100,表示每个新的内存分配都会触发垃圾回收,这可能会影响程序的响应时间和吞吐量。如果程序需要更高的吞吐量和更低的延迟,可以将 GOGC 的值增大,例如 200 或 300,来减少垃圾回收的频率。
-
内存池:可以通过使用 sync.Pool 等内存池来减少内存分配和回收的开销,从而减轻垃圾回收的压力。
-
对象大小和生命周期:可以尽量使用较小的对象,并尽可能减少对象的生命周期,从而减少内存的占用和垃圾回收的开销。
-
避免过度分配:可以使用性能分析工具来检测程序中是否存在过度分配的情况,并尽可能减少内存分配的次数和大小,从而减少垃圾回收的开销。
-
并发垃圾回收:Go 语言的垃圾回收器是并发的,可以在程序运行时自动调整垃圾回收的频率和策略,从而最大限度地减少对程序性能的影响。可以通过修改 GOMAXPROCS 环境变量来控制垃圾回收器使用的 CPU 核数,从而提高并发度,进一步提升程序的性能。
相关文章:
【Golang 面试 - 进阶题】每日 3 题(十七)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
ROS 7上实现私网互通方案
一、背景: 第一个私网现状:连接公域网是由tp-link进行拨号链接使用动态公网ip,内部网段是192.168.1.0/24 第二个私网现状:连接公域网是机房的固定公网ip,内部网段为10.0.0.0/16二、目标 安全的打通192.168.1.0/24和10.0.0.0/16的网络, 使得前者局域网中的机器能够安全访…...
iOS企业签名过程中APP频繁出现闪退是什么原因?
企业签名中,我们总会遇到这样或者那样的问题,要么掉签,要么闪退,那在之前的文章,已不止一次跟大家说了掉签的问题,今天就跟大家详细的聊一聊闪退的问题,希望对大家的推广有所帮助。 其实不管是…...
Unity dots IJobParallelFor并行的数据写入问题
Unity dots IJobParallelFor并行的数据写入问题 [BurstCompile] public struct IncrementJob : IJobParallelFor { [ReadOnly] public NativeArray<int> baseValues; public NativeArray<int> resultValues; public void Execute(int index) {resultValu…...
媒体资讯视频数据采集-yt-dlp-python实际使用-下载视频
对于视频二创等一些业务场景,可能要采集youtube等的相关媒体视频资源,使用[yt-dlp](https://github.com/yt-dlp/yt-dlp)是一个不错的选择,提供的命令比较丰富,场景比较全面yt-dlp 是一个用 Python 编写的命令行工具,主…...
MySQL 8
MySQL 8.0 相对于 MySQL 5.x(特别是 MySQL 5.7)引入了许多重要的新特性和改进。下面是一些主要的变化和增强功能的概述,包括一些示例来帮助理解这些新功能。 1. JSON 数据类型增强 JSON 类型索引:现在可以为 JSON 列创建索引,从而提高查询性能。JSON 函数扩展:增加了更多…...
Android进阶之路 - app后台切回前台触发超时保护退出登录
我们经常会在银行、金融或者其他行业的app中看到用户长时间将app放置于后台,当再次唤醒app时就会提示用户已退出登录,需要重新登录,那么该篇主要就是用于处理这种场景的 针对于放置后台的超时保护属于进程级别,所以我们需要监听进…...
论文阅读笔记:Semi-supervised Semantic Segmentation with Error Localization Network
论文阅读笔记:Semi-supervised Semantic Segmentation with Error Localization Network 1 背景2 创新点3 方法4 模块4.1 使用标注数据训练ELN4.2 使用ELN进行半监督 5 效果5.1 与SOTA方法对比5.2 消融实验 论文:https://arxiv.org/pdf/2204.02078v3.pdf…...
Flink开发语言选择:Java vs Scala,哪种更适合你的项目?
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...
轻空间成功完成陕西渭南砂石料场气膜仓项目
轻空间(江苏)膜结构科技有限公司凭借卓越的技术实力与丰富的项目经验,成功完成了陕西省渭南市砂石料场气膜仓的建设。这一项目的顺利交付,不仅满足了当地对高效仓储的需求,也为西北地区的仓储设施建设树立了标杆。 陕西…...
pikachu~文件下载漏洞
0x02文件下载 # 首先看到界面都是对图片的下载,然后我们需要对其中一张照片进行下载,查看它的文件地址可以发现 http://127.0.0.1/pikachu-master/vul/unsafedownload/execdownload.php?filenameai.png# 看到链接后发现我们可以修改我们想要传的的路径…...
MTK Android12 关机界面全屏展示
需求:关机和重启按钮点击后,去掉正在关机的动画和tips,改为一张图片实现。 修改点 修改点如下: 涉及到的修改文件 修改: \vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\globalactionsGlobalActionsDialogLite.java新增: \vendor\media…...
初识云计算
随着科技的飞速发展,云计算作为一种新兴的信息技术架构,正在逐渐改变我们的工作方式和生活方式。 云计算是什么? 云计算是一种通过互联网提供计算资源和服务的计算模式。它通过互联网将计算和存储资源进行集中和共享,为用户提供…...
golang sync.Cond实现读写锁
直接上代码: package mainimport ("fmt""sync""time" )// RWLock 实现一个简单的读写锁 type RWLock struct {readerCount int // 当前正在读取的读者数量writerCount int // 当前正在写的写者数量mutex sync.Mutex // 保护…...
从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃
从通用到定制:营销Agent如何跨越数据鸿沟,实现对话SOP的个性化飞跃 1.背景 营销 Agent 指的是在营销过程中洞察客户并作出决策以及行动的 AI 智能体,包括感知、理解、决策、交互、反馈多个模块。对话 SOP 是交互模块中非常重要的部分,如何在缺少数据的情况下快速实现千人…...
设计模式-单例设计模式
单例模式的设计和线程安全 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。实现单例模式时,线程安全性是一个重要考虑因素,特别是在多线程环境中。 1. C11 之前的线程安全实现 在 C11 之前&#…...
23_windows 使用sqlmap、kali使用sqlmap,SQL注入、sqlmap自动注入
sqlmap介绍 安装sqlmap 安装python环境 链接:https://pan.baidu.com/s/16QhhYCppSvuUikhKiOHNgg?pwd9LJY 提取码:9LJY C:\Users\leyilea> python // 测试python能不能用 >>> exit() // 退出 测试sqlmap是否可用 kali中运行sqlmapÿ…...
WPF学习(12)-Image图像控件+GroupBox标题容器控件
Image图像控件 Image也算是独门独户的控件,因为它是直接继承于FrameworkElement基类。 Image控件就是图像显示控件。Image类能够加载显示的图片格式有.bmp、.gif、.ico、.jpg、.png、.wdp 和 .tiff。要注意的是,加载.gif动画图片时,仅显示第…...
【Linux】基础IO认知
文件 1、回顾C语言中的文件接口2、对文件的理解(阶段一)3、文件操作3、1、C的文件操作接口3、2、认识系统调用接口3、2、强化对fd文件描述符及周边知识的理解 1、回顾C语言中的文件接口 事实上,我们在C语言的学习中了解的文件并不是真正的文件。从语言角度来说&…...
7. Kubernetes核心资源之Service服务实战
**service分类 : ** **ClusterIP : ** 默认类型,自动分配一个【仅集群内部】可以访问的虚拟IP **NodePort : ** 对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ipNodePort来访问该服务 **LoadBalanc…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...
MySQL用户远程访问权限设置
mysql相关指令 一. MySQL给用户添加远程访问权限1. 创建或者修改用户权限方法一:创建用户并授予远程访问权限方法二:修改现有用户的访问限制方法三:授予特定数据库的特定权限 2. 修改 MySQL 配置文件3. 安全最佳实践4. 测试远程连接5. 撤销权…...
