This paper describes a technique for checkpointing a running system by a combination of reflective introspection and program
analysis. By using an extension to Java’s Reflection API which allows activation frames and other aspects of execution state
to be reflectively inspected and modified, we can halt at and restart from arbitrary points in the execution. We apply this
checkpointing technique to an area that is not typically associated with reflection — optimization of memory footprint and
startup time. We have successfully used this technique in the joeq virtual machine to reduce the heap size and the application
startup time significantly.