Golang面试题五(GC)
🕗 发布于 2024-04-18 13:01 golang
后端 开发语言
目录
1.Golang GC版本
2.常见的垃圾回收算法有以下几种
3.怎么找到程序中无用的对象
引用计数法
根搜索法
GC roots对象
4.java与go的GC对比
5.三色标记法
1.Golang GC版本
- Go 1.3版本:普通标记清除法,整体过程需要启动STW,效率极低。
- Go 1.5版本: 三色标记法, 堆空间启动写屏障,栈空间不启动,全部扫描之后,需要重新扫描一次栈(需要STW),效率普通
- Go 1.8版本:三色标记法,混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要STW,效率较高。
2.常见的垃圾回收算法有以下几种
- 标记-清除算法(Mark-and-Sweep):该算法分为两个阶段,标记阶段和清除阶段。在标记阶段,垃圾回收器会遍历堆中的对象,并标记所有可达对象。在清除阶段,垃圾回收器会遍历堆中的对象,清除所有未被标记的对象。
- 复制算法(Copying):该算法将堆分成两个区域,一个是活动区域,另一个是空闲区域。在垃圾回收时,将活动区域中的可达对象复制到空闲区域中,然后清空活动区域。
- 标记-压缩算法(Mark-and-Compact):该算法结合了标记-清除算法和复制算法的优点。在标记阶段,垃圾回收器会遍历堆中的对象,并标记所有可达对象。在压缩阶段,垃圾回收器会将可达对象移动到堆的一端,然后清空堆的另一端。
- 分代收集算法(Generational Collection):该算法根据对象的生命周期将堆分为不同的代,通常分为年轻代和老年代。年轻代使用复制算法进行垃圾回收,老年代使用标记-压缩算法或标记-清除算法进行垃圾回收。
3.怎么找到程序中无用的对象
找到垃圾-->何时回收-->如何回收-->内存释放
引用计数法
不能检测出循环引用,而且实时维护引用计数,有也一定的代价
根搜索法
(可达性分析)设立若干种根对象,根对象的子对象也是存活的,当任何一个根对象到某一个对象都无法可达时,那么这个对象就是可回收的
GC roots对象
4.java与go的GC对比
Go和java的GC机制区别_go语言 与 java内存回收的区别-CSDN博客
5.三色标记法
Go语言GC机制超详细_go gc-CSDN博客
原文地址:https://blog.csdn.net/qq_22321199/article/details/137866351
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!
-
算法笔试-编程练习-好题-07
如果不熟悉python的底层的话,上面的程序看起来就是O(n)的时间复杂度。但是由于python的字符串类型的变量底层上是不可变的,因此每一次的+=,都需要经历:1)计算两边的字符串的长度,2)然后开
阅读更多2024-09-22
-
如何导出数据库时将ID也导出
如果你使用的是某种框架或工具(如 Sequelize、Django ORM 等),可以考虑使用这些工具提供的迁移或数据导出功能。你可以使用 SQL 脚本导出数据库,包括表结构和数据。这种方式可以确保数
阅读更多2024-09-22
-
Java stream流根据对象属性去重
以下是一个示例,展示了如何根据对象的某个属性去重,并保留具有该属性值的第一个或最后一个遇到的对象。.values().stream().collect(Collectors.toList()):从Ma
阅读更多2024-09-22
-
js进阶——函数作用域和块作用域
理解这些作用域概念和使用场景,能帮助开发者更好地控制代码的可维护性与性能,特别是在处理复杂逻辑时,掌握作用域的原理能避免许多常见的 JavaScript 错误。IIFE 的核心特点是,它能够创建一个独
阅读更多2024-09-22
-
使用Properties
iii.读写Properties时,使用getProperty()和setProperty()方法,不要调用继承自HashTabled的get()和put()方法(历史遗留问题)。i.它的Key-Va
阅读更多2024-09-22
-
招商银行招行笔试难度递增?要点解读
星R] 行测55min 言语理解+数学计算+思维策略55题,每道题做完后不允许返回修改,这部分建议求稳为主,你永远不知道下一 [星R] 游戏化测评包括找不同、记忆题和小球追踪,整天难度也较大,但和性
阅读更多2024-09-22
-
pytorch 同步机制
在 PyTorch 中,当多个算子(operators)和内核(kernels)被并行执行时,PyTorch 通过 CUDA 的和机制来管理并发和同步。CUDA 是一个异步计算平台,计算任务会被放入一
阅读更多2024-09-22
-
springboot集成rabbitmq
注意:客户端和服务器端不能在同一个服务,必须分开两个服务写。只需要监听deadLetterQueue队列的消息。用于监听客户端发送过来的消息。
阅读更多2024-09-22
-
IO流(java)
IO流概述IO流的分类IO流总体来看就有四大流IO流的体系FilelnputStream(文件字节输入流)作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。构造器说明创建字节输入流
阅读更多2024-09-22
-
WSL迁移Linux系统到非系统盘(完整实操版)
本文提供了使用 WSL 将 Linux 系统迁移到非系统盘的详细指南。步骤包括确认系统存在、导出系统为 tar 包、删除原系统、在目标盘创建存放文件夹、导入 tar 包回 Linux 系统、验证迁移成
阅读更多2024-09-22