LRU算法
LRU算法全称是 Latest Recently Used。其含义是在内存有限的情况下,内存使用后容量不足时,为了保证程序的运行,这时就不得不淘汰内存中的一些对象,释放这些对象占用的空间,那么选择淘汰哪些对象呢?LRU算法就提供了一种策略:淘汰最久未使用的对象。举个例子:一共3个单位的对象空间,现在进来了A、B、C,然后再插入D,空间满了,A是最早进来的,且未重复使用,LRU算法会把A淘汰掉。
实现
LRU算法最为精典的实现,就是HashMap+Double LinkedList。
- HashMap
方便查询,查询和存储都是O(1)级别,很快,而且value 值就是链表节点。 - Double LinkedList
双端队列,主要是用于淘汰节点、更新节点,利用尾节点来删除节点,避免每次都从头节点遍历到尾节点。如果已经存在的节点被再次访问,需要先删除节点、然后再头节点插入,这样就作为队列首节点。