1. 缓存的基本结构
Runtime 使用 cache_t
结构体来实现方法缓存:
struct cache_t {
struct bucket_t *_buckets; // 散列表
mask_t _mask; // 散列表大小掩码
mask_t _occupied; // 已使用的槽位数量
}
2. 缓存实现原理
-
散列表存储
- 使用 bucket(桶)数组存储缓存
- 每个 bucket 存储 selector 和 IMP 的键值对
- 使用散列算法计算 selector 的存储位置
-
缓存查找过程
- 计算 selector 的散列值
- 通过掩码计算在缓存表中的索引位置
- 如果发生冲突,使用线性探测解决
-
缓存更新策略
- 当缓存表占用率达到阈值时扩容
- 扩容时会清空原有缓存
- 采用懒加载方式初始化缓存
3. 性能优化设计
-
空间优化
- 使用掩码而不是取模运算
- 采用紧凑的数据结构
- 动态调整缓存大小
-
时间优化
- 使用位运算代替除法
- 采用线性探测而不是链表
- 缓存访问采用原子操作
网友评论