The framework clearly separates persistence control from storage control. The kind of storage to be used for saving application data depends heavily on the application requirements. Properties such as performance, capacity of the storage media and particularities of usage may affect the choice. This is why a hierarchy of different storage classes, useful in different application domains, is introduced. The hierarchy is split into volatile storage and non-volatile storage .
Data stored on non-volatile storage remains on the storage device even when a program terminates.
Data written to non-stable storage may get corrupted, if the system fails for instance by crashing during the write operation. Stable storage ensures that under certain assumptions stored data will never be corrupted, even in the presence of application crashes and other failures. Persistence support programmers will add support for new storage devices to the framework by extending the storage class hierarchy. Application programmers will use the framework to declare persistent objects. When instantiating a new persistent object, the application programmer specifies where the state of the object will be saved by choosing among the existing implementation of storage devices.