Persistent memory is here, and it is bound to revolutionize our computing infrastructures. Persistent memory stores information forever, just like disks, but unlike rotational media of yesteryears, persistent memory is blazingly fast. Unfortunately, our programming languages, runtime environments, and operating systems must all adapt to accommodate persistent memory. In this project, we want to extend the Java programming model to add support for persistent memory. Our goal is to ensure we can recover from power failures and execute the program in a crash-consistent manner.
To this end, we want to explore garbage collection in the Java programming language as an abstraction to exploit persistent memory. In particular, we want to periodically checkpoint the entire state of the Java program on persistent memory. The state consists of the currently executing stack and the program heap. We expect the student to perform the following tasks:
(1) To understand garbage collection in the Java programming language;
(2) To add checkpointing support in an open-source implementation of the Java runtime environment;
We expect the student to demonstrate with a working prototype that the checkpointing state is recoverable on power failure or any other form of a program crash.