这是我参与「第五届青训营 」笔记创作活动的第4天 1.1.优化的目的 提升软件系统处理能力,减小消耗 为什么要优化 用户体验UP 资源利用率UP 性能优化层面 业务代码 分析问题像pprof来优化 SDK 基础库 语言运行时 OS 2自动内存管理 动态内存 在程序运行时根据需求动态分配内存:mallloc() 自带内存 垃圾回收:由程序运行时自动管理,保证内存的准确性和安全性
2.1自动内存管理相关概念 Mutator:业务线程,分配新对象,修改对象指向关系 Collector:GC线程,找到存活对象,回收死亡对象 Serial GC :只有一个collector Parallel GC只有一个collector回收GC算法 Concurrent GC :mutators和collectors可以同时执行 如何评价GC算法 安全性 不能回收存活对象 吞吐率 花在GC上的时间 暂停时间 业务是否感知 内存开销 GC数据开销 追踪垃圾回收 2.2 垃圾回收 可以给扫描完成对象加一个指针 标记找到可达对象 清理不可达对象 2.3分带GC 分代垃圾回收中,将对象分为几类(几代),针对不同的代使用不同的GC算法。
我们对新生代对象执行的GC称为新生代GC(minor GC)。新生代GC的前提是大部分新生代对象都没存活下来,GC在很短时间就结束了。新生代GC将存活了一定次数的对象当做老年代对象来处理。这时候我们需要把新生代对象上升为老年代对象(promotion)。老年代对象比较不容易成为垃圾,所以我们减少对其GC的频率。我们称面向老年代对象的GC为老年代GC(major GC)。 年轻代 常规的对象分配 由于存活对象很少可以 copying collection 吞吐量高 老年代 一直活着 ,使用量大