1. A method of managing a cache comprising: identifying program states associated with an executing program; comparing a time of first discovery of a program state to a most recent time of first discovery to determine if the program state is associated with short-lived objects; and if the program state is not associated with short-lived objects and program execution has transitioned to the program state from a program state associated with short-lived objects, flushing the cache of at least one short-lived object.