Supporting Huge Address Spaces in a Virtual Machine for Java on a Cluster

To solve problems that require far more memory than a single machine can supply, data can be swapped to disk in some manner, it can be compressed, and/or the memory of multiple parallel machines can be used to provide enough memory and storage space. Instead of implementing either functionality anew and specific for each application, or instead of relying on the operating system's swapping algorithms (which are inflexible, not algorithm-aware, and often limited in their fixed storage capacity), our solution is a Large Virtual Machine (LVM) that transparently provides a large address space to applications and that is more flexible and efficient than operating system approaches. LVM is a virtual machine for Java that is designed to support large address spaces for billions of objects. It swaps objects out to disk, compresses objects where needed, and uses multiple parallel machines in a Distributed Shared Memory (DSM) setting. The latter is the main focus of this paper. Allocation and collection performance is similar to well-known JVMs if no swapping is needed. With swapping and clustering, we are able to create a list containing 1.2×108elements far faster than other JVMs. LVM's swapping is up to 10 times faster than OS-level swapping. A swap-aware GC algorithm helps by a factor of 3.

[1]  Emery D. Berger,et al.  Garbage collection without paging , 2005, PLDI '05.

[2]  Viktor K. Decyk,et al.  US DOE Grand Challenge in Computational Accelerator Physics , 1998 .

[3]  Henri E. Bal,et al.  Source-level global optimizations for fine-grain distributed shared memory systems , 2001, PPoPP '01.

[4]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[5]  Thomas R. Gross,et al.  An analytical model for software-only main memory compression , 2004, WMPI '04.

[6]  Peter Brezany,et al.  Parallelization of Irregular Out-of-Core Applications for Distributed-Memory Systems , 1997, HPCN Europe.

[7]  Todd C. Mowry,et al.  Compiler-based I/O prefetching for out-of-core applications , 2001, TOCS.

[8]  Toni Cortes,et al.  Swap compression: resurrecting old ideas , 2000, Softw. Pract. Exp..

[9]  Anna R. Karlin,et al.  Implementing global memory management in a workstation cluster , 1995, SOSP.

[10]  Akinori Yonezawa,et al.  An effective garbage collection strategy for parallel programming languages on large scale distributed-memory machines , 1997, PPOPP '97.

[11]  Cho-Li Wang,et al.  LOTS: a software DSM supporting large object space , 2004, 2004 IEEE International Conference on Cluster Computing (IEEE Cat. No.04EX935).

[12]  Luigi Rizzo A very fast algorithm for RAM compression , 1997, OPSR.

[13]  Martin C. Rinard,et al.  Compositional pointer and escape analysis for Java programs , 1999, OOPSLA '99.

[14]  Kuzman Ganchev,et al.  The NSWAP module for network swap , 2003 .

[15]  Samuel P. Midkiff,et al.  Practical escape analyses: how good are they? , 2007, VEE '07.

[16]  James R. Larus,et al.  Cache-conscious structure layout , 1999, PLDI '99.

[17]  Toni Cortes,et al.  Swap compression: resurrecting old ideas , 2000 .

[18]  Veljko M. Milutinovic,et al.  A survey of distributed shared memory systems , 1995, Proceedings of the Twenty-Eighth Annual Hawaii International Conference on System Sciences.

[19]  Jong-Deok Choi,et al.  Escape analysis for Java , 1999, OOPSLA '99.