后端基础day4-go优化与落地实践|青训营笔记

88 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第4天。本篇为第五届字节跳动青训营-寒假专场-后端基础课程的笔记。

课程链接:juejin.cn/course/byte…

本节课围绕 Go 内存分配和编译器相关知识展开,探讨目前 Go 内存管理过程中问题,提出解决方案,同时将通过对编译器基本算法讲解,引出编译器优化路径。

性能优化:提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力

  • 用户体验
  • 资源高效利用:降低成本,提高效率

image.png

内存管理

动态内存:程序在运行时根据需求动态分配的内存

自动内存管理:由程序语言的运行时系统管理动态内存

  • 避免手动内存管理,专注于实现业务逻辑
  • 保证内容使用的正确性与安全性

三个任务

  • 为新对象分配空间
  • 找到存活对象
  • 回收死亡对象的内存空间

自动内存管理相关概念

  • Mutator:业务线程,分配新对象,修改对象指向关系
  • Collector:GC线程,找到存活对象,回收死亡对象的内存空间
  • Serial GC:只有一个collector
  • Parallel GC:支持多个collectors同时回收的GC算法
  • Concurrent GC:mutator(s)与collector(s)可以同时执行

评价GC算法:

  • 安全性
  • 吞吐率
  • 暂停时间
  • 内存开销

image.png

image.png

编译器优化

编译器结构

  • 重要的系统软件
    • 识别符合语法和非法的程序
    • 生成正确且高效的代码
  • 分析部分(前端front end)
    • 词法分析,生成词素
    • 语法分析,生成语法树
    • 语义分析,收集类型信息,进行语义检查
    • 中间代码生成,生成intermediate representation
  • 综合部分(后端back end)
    • 代码优化,及其无关优化,生成优化后的IR
    • 代码生成,生成目标代码

静态分析

  • 静态分析:不执行程序代码,推导程序行为,分析程序性质
  • 控制流:控制程序的流
  • 数据流:数据在控制流上的传递