这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
本节课主要内容
- 自动内存管理
- Go 内存管理及优化
- 编译器和静态分析
- Go 编译器优化 课程文档以及PPT已经很详细了,所以我仅仅以我的角度,写我对课程的理解。
问:性能优化是什么? 提升软件系统处理能力,减少不必要的消耗
问:为什么进行系统性能优化? 1提高用户体验 2资源高效利用
这节课我们主要进行的优化就是业务层的优化以及语言运行时的优化,学习用pprof定位性能问题,
便于我们去做优化
自动内存管理
自动内存管理(垃圾回收):由程序语言的运行时系统管理动态内存 这样做可以让我们不必主要内存分配,专注于业务逻辑的实现,以及保证内存的正确性,可用性。
这里需要说明的是,用户创建的线程,也就相当于业务线程。
GC线程,也就是垃圾回收线程。
图中所示的有三种不同的垃圾回收 算法。
对象被回收条件:指针指向关系不可达的对象 标记根对象,是因为像静态变量,全局变量,常量,以及线程栈是经常使用的。另外所有可达的对象也要进行标记。 最后清理不可达的对象。
课程中提到了一个分代假说,很多对象的分配出来很快就不再使用了,而每个对象的年龄可以用经历GC的次数。据此,可以将对象分成年轻代和老年代。根据对象的年龄,采用不同的GC算法。
后面还提到了引用计数的概念:对象存活当且仅当引用数大于1. 这让我想到了linux的文件系统。文件的目录相当于一个索引,当一个文件的引用次数为0的时候,这个文件就彻底从文件系统消失了。linux命令 rm -rf File ,本质上的把对于File的引用设置成0,可能这个文件删除还存在存储器上,但是已经不能被系统感知到了。
先写到这里。