Q1 in SimpleLRUCache grows indefinitely with a common use pattern - not too much additions once a lot of elements are cached, but a lot of reads, with promote/demote activity. Promote removes element from L1, but leaves it in Q1. Afterwards, once the same element is 'demoted' from L2 back to L1, it's re-added to the queue. Q1 gets a chance to clear itself only when a completely new element is introduced into the cache, and even in this cases the chance is hard to take advantage of (elements removed from L1 due to promotion are not necessarily in the head of the Q1).