Orthogonal persistence, a property that any object can be made to persist independent of its type, is an important requirement for a persistent language. In this dissertation, we present a new technique called forced inheritance for providing orthogonal persistence to C++. This method achieves both orthogonal persistence and portability of application programs, which previous methods have not been able to provide together. In this technique, properties that make objects persist are attached as a header to an object or to a value of any type that is desired to persist. Attaching the header gives the effect of inheriting these properties from a virtual persistent root class regardless of its type. This technique provides orthogonal persistence since attaching the header to an object can be done for any object. It also provides portability since it does not extend the language. We have also developed an object-oriented database system prototype using forced inheritance and have proved the feasibility and effectiveness of the method.
To provide an illusion of infinite virtual memory for applications dealing with persistent objects, it is essential to manage an object buffer whose unit of replacement is a persistent object. Previous buffer replacement algorithms for managing fixed-length pages assume that the total cost is proportional to the number of buffer faults. However, in an object buffer, this assumption no longer holds since the objects are of variable-lengths and the cost of replacing an object varies for each object.
In this dissertation, we propose a new replacement algorithm suitable for object buffers. Based on a new cost model including the replacement cost and the sizes of objects, the proposed algorithm, which we name the Cost-based Object Buffer Replacement Algorithm(Cobra), tries to minimize the total expected cost. This algorithm replaces the objects that have minimum costs per unit time and unit space. The proposed model extends those of previous page-based algorithms by taking into account different sizes and different replacement costs of objects. The performance tests show that Cobra is almost always superior to LRU and LRU-k algorithms. Cobra is applicable in any applications in which previous approaches have been. It is especially useful in object-oriented database systems, in which replacement costs of objects vary significantly.