这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
前言
想着把之前的一下子补完还是有点困难,那就每天尽量把当天内容学到哪整理到哪吧,之后再补充和完善,加上自己的思考。
可能跟着视频码字的第一版笔记并不是很有用,精力投入不多,且被限制了思考,我会在调整过学习和比赛作息之后在课程以外做更多的资料查阅,并补充到这里,显得不那么浅显单调乏味。
一、概览
Ⅰ
优化:(提升软件系统处理能力,减少不必要的消耗,发掘计算机算力,为了优化用户体验和资源高效利用)
1.内存管理优化
2.编译器优化
背景:
1.自动内存管理和Go内存管理机制
2.编译器优化的基本问题和思路
实践:
1.字节跳动遇到的性能问题以及优化方案
Ⅱ
性能优化的层面:
业务层优化:
-
1.针对特定场景,具体问题具体分析 -
2.容易获得较大的性能收益语言运行时优化:
-
1.解决更通用的性能问题 -
2.考虑更多的场景 -
3.Tradeoffs数据驱动:
-
1.自动化性能分析工具——pprof -
2.依靠数据而非猜测 -
3.首先优化最大瓶颈
Ⅲ
性能优化与软件质量:
1.在保证接口稳定的前提下改进具体实现
2.测试用例:覆盖尽可能多的场景,方便回归
3.文档:做了/没做什么,能达到什么样的效果
4.隔离:通过选项控制是否开启优化
5.可观测:必要的日志输出
二、自动内存管理
2.1
1.动态内存:程序在运行时根据需求动态分配内存
2.垃圾回收:由程序语言运行时系统管理动态内存,避免手动管理,专注于实现业务逻辑,并保证内存使用的正确性和安全性。
3.三个任务:1)为新对象分配空间 2)找到存活的对象 3)回收死亡对象的空间
2.2
相关概念:
-
Mutator:业务线程,分配新对象,修改对象指向关系 -
Collector:GC线程,找到存活对象,回收死亡对象的内存 -
Serial GC:只有一个collector -
Parallel GC:支持多个collectors同时回收的GC算法 -
Concurrent GC:mutators和collectors可以同时执行 -
(Collectors必须感知对象指向关系的改变)
暂时先到这
希望能和dalao们一样,以一种更严谨认真的态度,像发表博文一样对待这个笔记。加油。
引用
字节内部课
标题:性能优化及自动内存管理 - 掘金