Byte addressable non-volatile memory (NVRAM) is likely to supplement, and perhaps eventually replace, DRAM. Applications can then persist data structures directly in memory instead of serializing them and storing them onto a durable block device. However, failures during execution can leave data structures in NVRAM unreachable or corrupt. In this paper, we address memory management of non-volatile memory, offering an integrated allocator and garbage collector that maintains internal consistency, minimizes memory leaks, and is efficient in the face of failures.
We show that a careful allocator design can both support a less restrictive and much more familiar programming model. By lazily persisting non-essential metadata and by employing a post-failure recovery-time garbage collector, the per allocation persistence overhead is greatly reduced. Experimental results show that the resulting online speed and scalability of our allocator are comparable to well-known transient allocators and significantly better than state-of-the-art persistent allocators.