性能优化与内存管理 | 青训营笔记

19 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 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:将可达对象压缩至内存的开始,后续内存分配直接使用后续的内存空间

策略选择根据:对象的生存周期