[ go语言day4学习笔记| 青训营笔记]

42 阅读2分钟

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

性能优化是什么?

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

为什么要做性能优化?

用户体验:带来用户体验的提升-让刷抖音更丝滑,让双十一购物不再卡顿
资源高效利用:降低成本,提高效率-很小的优化乘以海量机器会显著的性能提升
和成本节约

性能优化的层面

业务层优化

    针对特定场景、具体问题、具体分析
    容易获得较大性能收益

语言运行时优化

    解决更通用的性能问题
    考虑更多场景
    Tradeoffs

数据驱动

    自动化性能分析工具-pprof
    依靠数据而非猜测
    首先优化最大瓶颈

自动内存管理

动态内存

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

自动内存管理(垃圾回收)由程序语言的运行时系统管理动态内存

    避免手动内存管理,专注于实现业务逻辑
    保证内存使用的正确性和安全性:double-free problem等

分代GC

分代假说
intuition:很多对象在分配出来后很快就不在使用了
每个对象都有年龄:经历过GC的次数
目的:对年轻和老年的对象,制定不同的GC策略,降低整体内存管理的开销
不同年龄的对象处于heap的不同区域

Balanced GC

GAB对于go内存管理来说是一个对象
本质:将多个小对象的分配合并成一次达对象的分配
问题:GAB的对象分配方式会导致内存被延迟释放
方案:移动GAB中存活的对象
    当GAB总大小超过一定阈值时,将GAB中存活的对象复制到另外分配的GAB中
    原先的GAB可以释放,避免内存泄漏
    本质:用copyingGC的算法管理小对象

编译器的结构

重要的系统软件

 识别符合语法和非法的程序
 生成正确且高效的代码

分析部分

  词法分析,生成词素
  语法分析,生成语法树
  语义分析,收集类型信息,进行语义检查
  中间代码的生成,生成intermediate representation

综合部分

      代码优化:机器无关代码,生成优化后的IR
      代码生成,生成目标代码