  Byte-addressable, non-volatile memory (NVM) is emerging as a promising
technology. To facilitate its wide adoption, employing NVM in managed runtimes
like JVM has proven to be an effective approach (i.e., managed NVM). However,
such an approach is runtime specific, which lacks a generic abstraction across
different managed languages. Similar to the well-known filesystem primitives
that allow diverse programs to access same files via the block I/O interface,
managed NVM deserves the same system-wide property for persistent objects
across managed runtimes with low overhead.
  In this paper, we present UniHeap, a new NVM framework for managing
persistent objects. It proposes a unified persistent object model that supports
various managed languages, and manages NVM within a shared heap that enables
cross-language persistent object sharing. UniHeap reduces the object
persistence overhead by managing the shared heap in a log-structured manner and
coalescing object updates during the garbage collection. We implement UniHeap
as a generic framework and extend it to different managed runtimes that include
HotSpot JVM, cPython, and JavaScript engine SpiderMonkey. We evaluate UniHeap
with a variety of applications, such as key-value store and transactional
database. Our evaluation shows that UniHeap significantly outperforms
state-of-the-art object sharing approaches, while introducing negligible
overhead to the managed runtimes.
