Go语言原理与实践 | 青训营笔记

113 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。

自动内存管理

基本概念

  • 动态内存
    • 程序在运行时根据需求动态分配的内存:malloc()
  • 自动内存管理:由程序语言的运行时系统管理动态内存
    • 避免手动内存管理,专注于实现业务逻辑
    • 保证内存使用的正确性安全性: double-free problem, use-after-free problem
  • 三个任务
    1. 为新对象分配空间
    2. 找到存活对象
    3. 回收死亡对象的内存空间 image.png

image.png

追踪垃圾回收

image.png

分代GC

image.png

引用计数

image.png

Go内存管理及优化

内存分配

image.png image.png 对象分配是高频操作:每秒分配GB级别数据
小对象的占比较高
Go内存分配比较耗时

balanced GC

image.png

image.png

编译器和静态分析

编译器结构

image.png

静态分析

image.png

过程内和过程间分析

image.png

Go编译器优化

函数内联

内联:将被调用函数的函数体的副本替换到调用位置上,同时重写代码以反映参数的绑定

  • 优点:
    • 消除函数调用开销,如传递参数、保存寄存器等
    • 将过程间分析转换为过程内分析,帮助其他优化,如逃逸分析
  • 缺点:
    • 函数体变大
    • 编译生成的Go镜像变大

逃逸分析

image.png

加油!