这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
本课堂知识点总结
本次课程主要知识点
高性能Go
语言发行版优化与落地实践
优化
内存管理优化;编译器优化
背景
自动内存管理和Go内存管理机制;编译器优化的基本问题和思路
实践
字节跳动遇到的性能问题以及优化方案
性能优化目的
提升软件系统处理能力,减少不必要的消耗,充分发掘计算机算力,提升用户体验
主要内容
自动内存管理
动态内存:程序在运行时根据需求动态分配的内存
自动内存管理(垃圾回收):由程序语言的运行时系统管理动态内存;作用——避免手动内存管理,专注实现业务逻辑;保证内存使用的正确性和安全性。
任务:为新对象分配空间;找到存活对象;回收死亡对象的内存空间
GC算法评价
安全性:不能回收存活的对象;吞吐率:花在GC上的时间;暂停时间:业务是否感知;内存开销:GC元数据开销。
追踪垃圾回收
- 对象被回收的条件:指针指向关系不可达的对象
- 标记根对象
- 标记:找到可达对象
- 清理:所有不可达对象
标记根对象
标记可达对象
清理不可达对象
引用计数
每个对象都有一个与之关联的引用数目;对象存活条件:当且仅当引用数大于0。
优点:内存管理的操作被平摊到程序执行过程中;内存管理不需要了解routime的实现细节:C++智能指针。
缺点:维护引用计数开销较大;无法回收环形数据结构;内存开销较大;回收内存时依然可能引发暂停。
总结
本次课程主要对内存管理方面进行了讲述,了解了垃圾回收机制的内部原理,回收方式等。