Date of Award


Degree Name

Doctor of Philosophy


Computer Science


Eric Freudenthal


Software caches for garbage collected systems are unaware which cache entries are referenced by a client program. Lacking this key information, software caches cannot determine the cache’s contribution to the program’s memory footprint. Furthermore, their eviction heuristics must rely on access history as a proxy for usage. Divergence between usage and access history can undermine the intention of eviction thereby resulting in problematic cache behavior.

This dissertation proposes designs for a novel family of “usage-based” software cache informed of entry reachability by the automatic memory management system. Unlike extant software caches, usage-based caches can accurately determine their memory footprint because they are informed of memory usage. Usage-based software caches require information and controls that are not exposed by many garbage collected languages’ runtime systems including Java and Python. C#’s finalization interface is sufficient to construct a prototype implementation of a usage-based software cache called “FinalCache”.

Unfortunately, C#’s finalization interface creates high coupling between FinalCache and its entries. We are unaware of any language runtime systems that do not have this characteristic. These deficiencies and strategies for potentially remediating them are also described.




Received from ProQuest

File Size

92 pages

File Format


Rights Holder

Adrian Veliz