Why isn't libckpt enough for a Java Virtual Machine? To implement native classes and threads, the JVM relies on much more OS-specific process state than a "well-behaved" scientific application.

For native classes, shared libraries are loaded after exec() time, once the process has started running. Therefore, we have to save the state of those libraries to be able to explicitly restore them later.

For each Java thread, the JVM allocates two stacks, one for Java objects and one for native objects. These stacks also need to be saved.

We can discover and save the entire process memory map by querying the /proc debugging interface.