go语言学习7 | 青训营笔记

71 阅读2分钟

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

go语言性能优化与自动内存管理

1.性能优化

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

优势:1.带来用户体验的提升。

2.降低成本,提高效率。

性能优化的层面:

1.业务层优化:针对特定场景,具体问题,具体分析,容易获得较大性能收益。

2.语言运行时优化:解决更通用的性能问题,考虑更多场景,Tradeoffs。

3.数据驱动:自动化性能分析工具——pprof,依靠数据而非猜测,首先优化最大瓶颈。

性能优化与软件质量:

1.软件质量至关重要。

2.在保证接口稳定的前提下改进具体实现。

3.测试用例:覆盖尽可能多的场景,方便回归。

4.文档:做了什么,没做什么,能达到怎样的效果。

5.隔离:通过选项控制是否开启优化。

6.可观测:必要的日志输出。

2.自动内存管理

1.概念

Mutator:业务线程,分配新对象,修改对象指向关系。

Collector:GC线程,找到存活对象,回收死亡对象的内存空间。

Serial GC:只有一个collector。

Parallel GC:支持多个collectors同时回收的GC算法。

Concurrent GC: mutator(s)和collector(s)可以同时执行。

2.评价GC算法

安全性:不能回收存活的对象。

吞吐率:1-GC时间/程序执行总时间。即花在GC上的时间。

暂停时间:业务是否感知。

内存开销:GC元数据开销。

3.追踪垃圾回收

对象被回收的条件:指针指向关系不可达的对象。

标记根对象:静态变量、全局变量、常量、线程栈等。

标记:找到可达对象。

清理:所有不可达对象。

根据对象的生命周期,使用不同的标记和清理策略。