Go 语言的垃圾回收机制概览
3月 22, 2021
之前已经看过了 常见的垃圾回收算法,有了一定的基础,现在再来了解下 Go 语言的垃圾回收机制。 三色抽象 # Go 语言如今已经演变成增量式的垃圾回收策略,即不是一口气运行 GC,而是和 Mutator 交替运行的,因此不会长时间妨碍到 Mutator 的运行。Go 语言增量式回收是基于“标记-清除”算法的一种优化思路,具体的实现是三色标记法。 简单来说,三色标记算法将程序中的对象分成白色、黑色和 … ...
之前已经看过了 常见的垃圾回收算法,有了一定的基础,现在再来了解下 Go 语言的垃圾回收机制。 三色抽象 # Go 语言如今已经演变成增量式的垃圾回收策略,即不是一口气运行 GC,而是和 Mutator 交替运行的,因此不会长时间妨碍到 Mutator 的运行。Go 语言增量式回收是基于“标记-清除”算法的一种优化思路,具体的实现是三色标记法。 简单来说,三色标记算法将程序中的对象分成白色、黑色和 … ...
程序中的数据和变量在运行时会被分配到程序所在的虚拟内存中,内存空间包含两个重要的区域:堆(heap)和栈(stack),函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存由编译器进行管理。 用户程序(Mutator)通过内存分配器(Allocator)在堆上申请的内存,垃圾回收器(Collector)负责回收堆上的内存空间。可以说内存分配器和垃圾回收器共同管理着 Go 语言的堆内存。 … ...
本来想直接看下 Go 的垃圾回收机制,但是发现自己现在对内存管理和垃圾回收的了解都比较少,所以只能先来研究下常见的垃圾回收算法了,本篇即是《垃圾回收的算法与实现》的学习笔记,目标是能够描述清楚各种 GC 算法的复杂度、优缺点。 基础概念 # GC(Garbage Collection) # 即垃圾回收,是管理堆中已分配对象的机制。 对象(Object) # 对象在 GC 里的概念是:应用程序使用的 … ...
同很多其他语言如 Python、JavaScript 一样,在 Go 中涉及到复制数据的场景也需要注意深拷贝和浅拷贝的问题。 深拷贝和浅拷贝 # Go 的数据类型可以分为值类型和引用类型两种。值类型的变量和变量的数据都是存储在栈中,Int、Float、Bool、Array、Sturct、String 等都是值类型。引用类型的变量为一串地址,存储在栈中, … ...
操作系统进程间通信、以及并发的处理方式,是调度器能够高效运行的基础,上篇说了调度器的策略,本篇继续深入调度器的背后,看看进程间通信、同步和并发控制如何支撑着这套现代操作系统的调度机制。内容上是按照进程间通信引出了并发控制方法:同步原语,并发又进而引出了死锁问题。 进程间通信(IPC) # 进程间通信(Inter-Process Communication,IPC)是多进程协作的基础,进程间通信的很 … ...
操作系统中的调度器有任务调度、I/O 调度(以后再说)、内存调度(之前提到的换页策略)等多种类型,本文主要关注任务调度。在单核多进程并发的环境里,进程之间并不是“并行”执行的,实际上在任何时刻都只有一个进程处于执行状态,背后是 CPU 在不停地进行上下文切换,让你看起来像是多个任务在并行执行。而任务调度器要做的就是决定选择哪个进程执行,什么时候执行,执行多久,下面开始详细介绍。 调度 … ...
进程模型 # 进程的概念是随着多道批处理系统的概念产生的,MULTICS 之前还叫 Job,后来它为了区别这个 IBM 公司发明的术语改为了 Process,进程不是程序,程序是放入内存的一段数据,而进程是带有状态的一种活动、一系列动作,它保存了程序运行时的一系列状态。如果一个程序运行两遍,那就算作是两个进程,只不过可能只有一个副本被考入内存。 进程作为拥有资源分配的最小单位,是一个正在执行程序 … ...
之前说到了 Goroutine 的运行时调度机制,引发了我对操作系统调度的进一步回忆,发现已经非常模糊,只能从头再来。在很多大型系统中,包括编程语言,都有调度器的概念,其核心的作用都是对有限的处理器资源进行最大化利用。具体到我目前关注的,也就是操作系统中关于进程和线程的调度策略以及并发处理机制。 操作系统的任务调度机制(一)演进历史 操作系统的任务调度机制(二)进程和线程模型 操作系统的任务调度机 … ...
继续复习操作系统,话说随着 CPU 计算资源的性能开始过剩,压在内存身上的担子越来越重了,堪称新时期的性能瓶颈,对操作系统来说,内存管理机制也要进行近乎极致的优化才可以充分发挥 CPU 的正常水平。 操作系统对内存管理的需求 # 物理内存 # 当前 1T 容量的机械硬盘价格大约是 200 元,而 200 元只能买一个容量为 8G 的内存条。一直以来差不多都是这样的差距,内存的价格永远比硬盘贵,内存 … ...
正在看王爽的《汇编语言》,因为我在 Mac M1 环境,按书上做汇编实验的话,搜索了一圈发现 DOSBox 应该可以满足我的需要,它是一个跨平台的可以运行 MS-DOS 的模拟器。 DOSBox # 下载地址 https://www.dosbox.com/ 这个模拟器应该是被一些老玩家拿来玩上世纪 80 年代的 DOS 游戏了,就像美剧少年谢尔顿里面那样的。 Debug # … ...