“…In automatic error recovery applications, memory checkpointing enables fast and safe recovery to known and stable program states [20,22,23,32,39,53,54,57,58,62,70]. In debugging applications, it enables users to efficiently navigate through several program states observed during the execution, while empowering advanced debugging techniques such as reverse/replay debugging [27,34,60,61]. Memory checkpointing also serves as a key enabling technology for important first-class programming abstractions like software transactional memory [39], application-level backtracking [11,76], and periodic memory rejuvenation [68].…”