go学习 | 青训营笔记

50 阅读2分钟

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

本课堂知识点总结

本次课程主要知识点

高性能Go

语言发行版优化与落地实践

优化

内存管理优化;编译器优化

背景

自动内存管理和Go内存管理机制;编译器优化的基本问题和思路

实践

字节跳动遇到的性能问题以及优化方案

性能优化目的

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

主要内容

自动内存管理

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

自动内存管理(垃圾回收):由程序语言的运行时系统管理动态内存;作用——避免手动内存管理,专注实现业务逻辑;保证内存使用的正确性和安全性。

任务:为新对象分配空间;找到存活对象;回收死亡对象的内存空间

GC算法评价

安全性:不能回收存活的对象;吞吐率:花在GC上的时间;暂停时间:业务是否感知;内存开销:GC元数据开销。

追踪垃圾回收
  1. 对象被回收的条件:指针指向关系不可达的对象
  2. 标记根对象
  3. 标记:找到可达对象
  4. 清理:所有不可达对象

image.png

标记根对象

image.png

标记可达对象

image.png

清理不可达对象

image.png

引用计数

每个对象都有一个与之关联的引用数目;对象存活条件:当且仅当引用数大于0。

image.png

优点:内存管理的操作被平摊到程序执行过程中;内存管理不需要了解routime的实现细节:C++智能指针。

缺点:维护引用计数开销较大;无法回收环形数据结构;内存开销较大;回收内存时依然可能引发暂停。

总结

本次课程主要对内存管理方面进行了讲述,了解了垃圾回收机制的内部原理,回收方式等。