|
We implemented orthogonal persistence for the Java platform by adding
persistent object caching to a high-performance virtual machine that
uses exact garbage collection, the Sun Microsystems Laboratories Virtual
Machine for Research (''ResearchVM'').1 This paper gives an
overview of our design for the read and write barriers needed to support
persistence. The key design decision we made was the choice of a pointer
swizzling strategy. Pointer swizzling speeds up programs by translating
persistent addresses (references to persistent objects on disk) into
normal virtual memory addresses in the object cache. The swizzling
technique we chose is simple (requires few source changes to the
ResearchVM) and performs well (adds acceptably low CPU overhead to the
ResearchVM). Our integration of the new barriers was considerably
simplified by an internal memory interface that the ResearchVM
consistently uses, except in its Just-In-Time (JIT) compiler, to access
program runtime values. Our new persistent version of the ResearchVM,
the PEVM, requires just 30% of the changes necessary in our previous
persistent virtual machine implementations. It executes programs with
only modest runtime overhead (typically 10-20%) compared to an unchanged
ResearchVM.
1A ResearchVM is embedded in Sun's JavaTM 2 SDK
Production Release for the SolarisTM Operating Environment, available at
http://www.sun.com/solaris/java/.
|