To manage the increasing complexi ty of software, developers employ a number of different strategies. These include using high-level, type-safe, object-oriented programming languages, executing applications within managed runtime environments (MREs), modularizing software into independent isolated components, and maximizing programmer productivity by implementing each component in the most-suitable language. Moreover, administrators and tools increasingly co-locate components on the same physical machine to better utilize multi-core systems via thread-level parallelism and to enable efﬁcient cross-component communication. As a result, multilanguage, multi-runtime systems that employ component co-location on multi-core shared-memory architectures are more and more common.
In such systems, memory management takes place within runtimes (intra-runtime) and between runtimes (cross-runtime). Intra-runtime memory management includes allocation and automatic reclamation of objects within anMRE. Cross-runtime memory management refers to communication, coordination, and object sharing across MREs. Both intra-runtime and cross-runtime memory management rely on the mechanisms and abstractions of the underlying operating system (OS) for efﬁcientimplementation.
The focus of our research is to identify ways to more effectively exploit extant OS functionality to improve intra-runtime and cross-runtime memory management in terms of performance as well as programming model. Speciﬁcally, we design, implement, and evaluateMRE extensions that leverage virtual memory, shared memory, and shared libraries to better coordinate memory management across the system layers.
For intra-runtime memory management, we develop new techniques to improve throughput, reduce pauses, increase yield, and enhance modularity of parallel and concurrent collectors. For cross-runtime memory management, we investigate type-safe, transparent object sharing between isolated MREs to enable cross-language communication and synchronization without expensive object serialization and explicit message passing.
Our empirical results indicate that our contributions signiﬁcantly improve both intra-runtime and cross-runtime memory management by better leveraging OS support. We obtain large performance gains for paral lel and concurrent collectors as well as inter-runtime communication over the state-of-the-art memory management systems. In addition, our techniques enhance the programming model for both application developers and runtime architects.