**********************************************************
* 一块固定大小的内存 *
* *
* *
* **************** ******************* *
* * A * * B * *
* * 。 。。。 * * * *
* * 。。 * * 。。。 * *
* * 。。。。。 * * 。 * *
* * 。 。。。 * * 。。 * *
* * * * * *
* **************** ******************* *
* *
**********************************************************
如上图所示,A 和 B 是两个缓存管理器,他们共用同一块固定大小的内存。
两个缓存管理器 A 和 B 都会缓存不同类型的数据。当向 A 中缓存数据时,如果内存不足会按照一定策略从 A 中淘汰掉一些缓存。B 也一样。
每次缓存的数据大小可能不一样,可能大,也可能小。
现在的问题是,A 中的缓存太多了,导致内存剩余的太少,当 B 中要加入一个缓存项的时候就必须淘汰掉 B 中的其它的缓存项。这样就会导致 B 中的缓存淘汰过于频繁。
在不增加内存的情况下,如何缓解这种情况?
我的想法是设立某种统计量(如平均每添加多少次缓存会触发一次淘汰),超出某个范围后就自动从 A 和 B 中各淘汰掉一定比例的内存。
大家有什么好的办法?
1
billlee 2021-03-30 23:42:52 +08:00
为什么要这样搞呢?这种问题 ZFS on Linux 都没解决
|
2
killergun 2021-03-31 09:06:29 +08:00
A,B,你在把内部细分为存储不同大小的块。我感觉淘汰就是用新数据覆盖旧数据,感觉这个就是会频繁写,还好,主要是内存碎片问题。你可以研究下 GC 相关算法。
|