Go学习第四课 | 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 5 天

一、重点内容

  • 自动内存管理
  • 编译器和静态分析

二、自动内存管理

相关概念

  1. Mutator :业务线程,分配新对象,修改对象指向关系
  2. Collector:GC线程,找到存活对象,回收死亡对象的内存空间
  3. Serial GC:一个GC线程处理多个业务线程
  4. Parallel GC:支持多个GC线程同时回收处理多个业务线程
  5. Concurrent GC:支持GC线程和回收线程同时执行

自动内存管理

自动内存管理(Garbage collection),又称垃圾回收,处理的是由程序语言运行时系统管理动态内存,能够避免手动内存管理,专注于实现业务逻辑。

自动内存管理(GC)主要实现三个任务:

  1. 为新对象分配空间
  2. 找到存活对象
  3. 回收死亡对象的内存空间

GC算法之一:追踪垃圾回收

追踪垃圾回收是GC算法之一。通常垃圾被回收的条件是指针指向不可达的对象。

清理不可达对象采用几种策略:

  1. Copying GC: 将存活对象复制到其他的内存空间
  2. Mark-sweep GC:将死亡对象的内存空间标记为可分配,设定free链路
  3. Mark-compact GC:移动并整理存活对象

具体选择何种策略,根据对象的特性而分。

分代GC(Generational GC):根据对象的年龄,制定不同的GC策略:

  1. 年轻对象:由于存活对象很少可以采用Copying GC
  2. 老年对象:可以采用Mark-sweep GC

GC算法之二:引用计数

每个对象都有一个与之关联的引用数目,当引用书大于0时,可以判定对象存活。

三、编译器和静态分析

编译器的结构

  1. 分析部分(前端)
    • 词法分析
    • 语法分析
    • 语义分析
    • 中间代码生成
  2. 综合部分(后端)
    • 代码优化
    • 代码生成

静态分析

静态分析不执行代码,而是推导程序的行为,分析程序的性质。根据程序的控制流和数据流分析程序的性质

过程内分析和过程间分析

  1. 过程内分析:仅在函数内部进行分析
  2. 过程间分析:考虑过程调用时参数传递和返回值的数据流和控制流

四、个人总结

此课程的理论部分比较多,实践部分少,因此此笔记主要用来总结理论知识。