缓存预热与冷启动
更新时间:2026-10-01。第一次跑和后面跑速度不同,多半是冷启动缺失在起作用。
本文要回答的问题
- 为什么首次慢、重复几次后变快?
- 基准测试里如何正确处理热身?
一、冷启动代价
冷缓存里全是 compulsory miss,数据要从内存/下层逐级取,首次延迟高;随执行进行,热数据驻留,进入稳态。这个现象在缓存、连接池、JIT 中都存在。
二、预热与测量
做容量/性能基准时,先跑一段 warm-up 让结构填满再进入测量区间,否则测的是混合冷启动值。但要分清目的:评估“真实用户首次访问”时冷启动是产品体验的一部分,不能用预热掩盖。
三、常见坑
- 不预热直接把首次数当稳态。
- 全程预热后误判用户首次延迟。
- 实验间不清缓存导致结果不一致。
小结
冷启动带来首次缺失,预热用于获得稳态、清空缓存用于可重复;但首次体验要单独测量。下一篇 LLC 在多核上的分片。
总结
冷缓存下 compulsory miss 集中爆发,数据要从内存逐级取回,所以程序第一次跑慢、热身后进入稳态——连接池、JIT 也遵循同样规律;基准测试必须先做 warm-up 再进入测量区间,实验之间清空缓存才能复现,但评估真实用户体验时冷启动本就是产品延迟的一部分,不能用预热掩盖。预热是测量工具不是优化手段:稳态性能靠热身测准,首次体验要单独面对。