Is simply purging values that are older than a threshold the right approach here?  It seems like most of the space overhead would come from the RDDs rather than the integer HashMap keys.  Purging old values will only benefit us we can garbage-collect those values. 

Imagine that I have a job that runs hundreds of iterations of an algorithm over a cached data set, which might take a long time to complete.  A naive timeout would purge this cached, long-lived RDD from the HashMap even though there are other references keeping it alive, so we unnecessarily lose the ability to display its information.

On the other hand, we don't want to add strong references that would prevent RDDs from being garbage-collected.

Maybe we could use a WeakConcurrentHashMap, which would address this problem.  It looks like Guava's [MapMaker](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/MapMaker.html) can construct a these, but I don't have personal experience with it.

This approach doesn't address cases where the cache contains blocks from an RDD that has been garbage-collected.  I suppose that we could use MapMaker to make a map that uses soft references, but I don't know how this performs in practice.