这是我参与「第五届青训营」伴学笔记创作活动的的第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.追踪垃圾回收
对象被回收的条件:指针指向关系不可达的对象。
标记根对象:静态变量、全局变量、常量、线程栈等。
标记:找到可达对象。
清理:所有不可达对象。
根据对象的生命周期,使用不同的标记和清理策略。