闲置缓存为什么一直减少而不会释放?

缓存任务设定的全部缓存空间可以在逻辑上分成三个部分:1)没有任何数据的空白缓存;2)存储了数据并且处于非备换状态的缓存,这里称作已用缓存;3)存储了数据但处于备换状态的缓存,这里称作备换缓存

闲置缓存指的是空白缓存和备换缓存之和。空白缓存会首先被用来缓存新数据,变为已用缓存。因此随着缓存的进行,空白缓存会越来越少,相应地,闲置缓存就一直在减少。当闲置缓存减少到一定阈值后,PrimoCache将会根据缓存淘汰算法把一小部分已用缓存标记为备换状态,将其转变为备换缓存。备换缓存和已用缓存本质上没有区别,如果Windows或其它应用程序需要读取的数据在备换缓存上,则仍然可以直接从备换缓存中获取。两者的区别仅在于当需要缓存新的数据时,备换缓存会被优先使用,其上的旧缓存数据将直接被新数据覆盖。PrimoCache不需要显式地释放已用缓存,而是直接通过状态转换进行调度,这样可以最大程度地利用缓存。只有当缓存数据对应的文件被删除后,这部分缓存才会被显式释放。

您可能有疑问,如果闲置缓存的数量小于新数据的大小,是不是就无法缓存全部的新数据呢?答案是否定的。这是因为PrimoCache在整个缓存空间中可以根据需要和算法随时转换已用缓存和备换缓存。当闲置缓存先缓存了部分新数据后,PrimoCache同时会将部分已用缓存转换为备换缓存,这些备换缓存又可以继续缓存剩下的新数据。

因此闲置缓存并不是指示可用缓存还有多少,而是指示缓存淘汰算法是否已经触发。当数值停留在32MB左右时,表示所有缓存都已经缓存了数据,淘汰算法被触发,新数据被缓存的同时会有旧缓存数据被丢弃。而当前实际可用的缓存空间则按以下公式计算:可用缓存空间 = 全部缓存空间 - 缓写数据块空间。没有开启延时写入时,缓写数据块空间为0,此时可用缓存就是全部缓存空间。
标签