in Q1 and Q2 respectively as their access frequencies are 2 and 4. The queue in which a block is placed is dependent on access frequency(f) as log2(f). When the cache is full, the first block to be evicted will be the head of Q0 in this case a. If a is accessed one more time it will move to Q1 below b. Pannier: Container-based caching algorithm for compound objects Pannier is a container-based flash caching mechanism that identifies divergent (heterogeneous) containers where blocks held therein have highly varying access patterns. Pannier uses a priority-queue based survival queue structure to rank the containers based on their survival time, which is proportional to the live data in the container. Pannier is built based on Segmented LRU (S2LRU), which segregates hot and cold data. Pannier also uses a multi-step feedback controller to throttle flash writes to ensure flash lifespan. Static analysis One may want to establish, through static analysis, which accesses are cache hits or misses, for instance to rigorously bound the worst-case execution time of a program. The output of static analysis is thus, for every access in the program, an indication if it always a cache hit, always a miss, or in indeterminate status. Many refinements are possible: for instance one may establish that an access is a hit if the procedure where it is located is used in certain calling contexts, that an access in a loop a cache miss in the first iteration of that loop but a hit in the other iterations, etc. A classical approach to analyzing properties of LRU caches is to associate to each block in the cache an "age" (0 for the most recently used, and so on up to cache associativity) and compute intervals for possible ages. This analysis can be refined to distinguish automatically cases where the same program point is accessible by paths that result, for some, in misses, and for some, in hits. One may even obtain an exact analysis (with respect to an execution model that considers only the syntactic control flow of the program, without semantics for conditions) that is at the same time efficient by abstracting sets of cache states by antichains, which are themselves represented by compact binary decision diagrams. This good property of LRU from the point of view of static analysis does not generalize to pseudo-LRU policies. It indeed can be shown that,