• 技术文章 >后端开发 >Golang

    go语言需要手动管理内存吗

    青灯夜游青灯夜游2022-12-16 15:05:59原创1484

    go语言不需要手动管理内存;go语言内置内存管理功能(GC机制),是一种自动内存管理的机制。当程序向操作系统申请的内存不再需要时,垃圾回收主动将其回收并供其他代码进行内存申请时候复用,或者将其归还给操作系统,这种针对内存级别资源的自动回收过程,即为垃圾回收;而负责垃圾回收的程序组件,即为垃圾回收器。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    go语言不需要手动管理内存;go语言内置内存管理功能(GC机制),开发者不需要关心内存的申请和释放,这样为使用者带来极大的便利。

    什么是GC,又有什么用?

    GC,全称 Garbage Collection,即垃圾回收,是一种自动内存管理的机制。

    当程序向操作系统申请的内存不再需要时,垃圾回收主动将其回收并供其他代码进行内存申请时候复用,或者将其归还给操作系统,这种针对内存级别资源的自动回收过程,即为垃圾回收。而负责垃圾回收的程序组件,即为垃圾回收器。

    垃圾回收其实一个完美的 “Simplicity is Complicated” 的例子。一方面,程序员受益于 GC,无需操心、也不再需要对内存进行手动的申请和释放操作,GC 在程序运行时自动释放残留的内存。另一方面,GC 对程序员几乎不可见,仅在程序需要进行特殊优化时,通过提供可调控的 API,对 GC 的运行时机、运行开销进行把控的时候才得以现身。

    在计算中,内存空间包含两个重要的区域:栈区 (Stack) 和堆区 (Heap);栈区一般存储了函数调用的参数、返回值以及局部变量,不会产生内存碎片,由编译器管理,无需开发者管理;而堆区会产生内存碎片,在 Go 语言中堆区的对象由内存分配器分配并由垃圾收集器回收

    通常,垃圾回收器的执行过程被划分为两个半独立的组件:

    GC中的根对象

    根对象在垃圾回收的术语中又叫做根集合,它是垃圾回收器在标记过程时最先检查的对象,包括:

    垃圾回收

    在 Go 语言中,垃圾回收器实现的算法是一个并发的三色标记和扫描收集器

    垃回收器与 Go 程序同时运行,因此需要通过一种写屏障算法来检测内存中的潜在变化。启动写屏障的唯一条件是在短时间内停止程序,即 “Stop the World”

    9.png

    写屏障的目的是允许收集器在收集期间保持堆上的数据完整性

    1.1 实现原理

    Go 语言的垃圾收集可以分成清除终止、标记、标记终止和清除四个不同的阶段,其中两个阶段会产生 Stop The World (STW)

    10.png

    清除终止阶段

    标记阶段 (STW)

    标记终止阶段 (STW)

    清理阶段

    1.2 三色标记法

    三色标记算法将程序中的对象分成白色、黑色和灰色三类:

    三色标记垃圾收集器的工作原理很简单,可以将其归纳成以下几个步骤:

    11.png

    更多编程相关知识,请访问:编程视频!!

    以上就是go语言需要手动管理内存吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:go语言
    上一篇:go语言协程是什么 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go语言中泛型是什么• go语言怎么删除字符串字符• go语言是哪个公司开发• go语言搭载什么数据库
    1/1

    PHP中文网