这是我参与「第五届青训营」伴学笔记创作活动的第 3 天,今天学习的是Go语言的性能优化、内存管理中的一些内容
性能优化
性能优化概念
性能优化:提升软件系统的处理效率,充分发掘计算机算力
性能优化作用:带来用户体验提升,降低成本,提高效率
性能优化的层面
业务层优化:针对特定场景、具体问题,容易有较大收益
语言运行层面:需要考虑更多场景,解决通用的性能问题
数据驱动:优先突破瓶颈,依靠数据优化,例如自动化性能分析工具pprof
性能优化需要在保证软件、接口正常稳定的情况下进行改进
自动内存管理
自动内存管理概念
自动内存管理:在程序运行时,由系统管理动态内存的分配
自动内存管理优点:保证了内存使用的正确性和安全性,让开发者更专注于实现业务逻辑
自动内存分配的任务:为新对象进行空间分配,判断存活对象,回收死亡对象的内存空间
自动内存分配线程
Mutator:业务线程,用于分配对象、修改对象关系
Collector:GC线程,用于找到存活对象,回收死亡对象的内存空间
Serial GC:只支持一个Collertor
Parallel GC:支持多个Collector同时进行回收GC算法
Concurrent GC:Mutator和Collector可以同时进行
追踪垃圾回收
回收条件:通过指针判断是否为可达对象,对不可达对象进行回收
回收过程:对根对象进行标记->通过根对象找到所有可达对象->清除所有不可达对象
垃圾回收不同策略的实现原理:
1、CopyGC:将可达对象先复制到另外的内存空间,将原空间全部回收
2、Mark-Sweep GC:将要回收的空间进行管理,后续内存分配时直接分配被管理的内存空间
3、Compact GC:将可达对象压缩至内存的开始,后续内存分配直接使用后续的内存空间
策略选择根据:对象的生存周期