Exploring Checkpointing for Java on Persistent Memory




Persistent memory is here, and it is bound to revolutionize our computing infrastructures. Persistent memory stores information forever, just like disks, but unlike the rotational media of yesteryears, persistent memory is blazingly fast. Unfortunately, our programming languages, runtime environments, and operating systems must all adapt to accommodate the emerging persistent memory. Much current research investigates new programming models and extensions to existing languages to exploit persistent memory. In this way, existing programs need a rewrite, and we need to teach programmers new skills to exploit persistent memory. An alternative is to offer persistence without changes to the programming model. Some old parrots do not wish to learn new songs!
In this project, we want to investigate transparent support for persistent memory in the Java programming language. With no changes to the programming model, we want to ensure that commodity Java applications can execute seamlessly on persistent memory. A challenge of persistent memory is that in case of a program crash or power failure, we can recover the program state. The recovery mechanism must ensure that the program can begin execution from the point of failure. Thus, we want to explore the design and implementation of a crash-consistent Java runtime environment. 


Our goal is to ensure we can recover from power failures and other program crashes and execute the Java 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 recently mutated portions of 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.


The hardware-software codesign nature of this project is rewarding for students at both the undergraduate (honors) and graduate level. The student will gain a deeper understanding of programming language implementation and the architecture of our memory systems. The student will further learn to implement a real system prototype and experimental design and performance evaluation. 


Java programming language

Garbage collection

Memory systems

Persistent Memory

Updated:  1 June 2019/Responsible Officer:  Dean, CECS/Page Contact:  CECS Marketing