1. A method for saving and recovering the state of software in an object oriented software environment, said method comprising the steps of: (a) recording persistent objects into persistent storage, said recording occurring at times designated by each of a plurality of essential objects; (b) instantiating a replacement object for each of the plurality of essential objects, based on the persistent object; (c) executing a hydrate method within each of the plurality of essential objects; (d) instantiating replacement non-essential objects; and (e) generating non-essential values.