内存管理 | 青训营笔记

96 阅读2分钟

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

课堂笔记

  • 本堂课的知识要点有哪些?

1.性能优化和软件质量

2.自动内存管理

3.内存分配

4.编译器

  • 本堂课介绍了哪些知识点?

(一)性能优化与软件质量

1.软件质量至关重要

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

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

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

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

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

(二)自动内存管理

动态内存 :

malloc()

自动内存管理(垃圾回收) :

避免手动内存管理,专注逻辑实现

保证内存使用的正确性和安全性

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

Collector:GC线程,找到存活对象,回收死亡对象

Serial GC:只有一个collector

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

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

(三)内存分配

分块

缓存

优化方案:Balanced GC

目标:为对象在heap上分配内存

(四)编译器

1.编译器的结构

重要的系统软件: 识别符合语法和非法的程序
生成正确且高效的代码
分析部分(前端 front end):

词法分析,生成词素 (lexeme)
语法分析,生成语法树
语义分析,收集类型信息,进行语义检查
中间代码生成,生成 intermediate representation (IR)

综合部分(后端 back end) : 代码优化,机器无关优化,生成优化后的 IR
代码生成,生成目标代码

2.静态分析

静态分析:不执行程序代码,推导程序的行为,
分析程序的性质。

控制流 (Control flow):程序执行的流程

数据流 (Data flow):数据在控制流上的传递

3.编译器的优化

函数内联

Beast Mode

逃逸分析

  • 本章有什么知识点不容易掌握?

需要对硬件有一定程度的理解才可以很清晰的知道内存的存储方式,以及相关代码对其的优化和调用...

需要丰富的开发经验和对内存的理解才可以掌握这节课里面的一些概念