Memento Mori: Dynamic Allocation-site-based Optimizations
Venue
Proceedings of the 2015 ACM SIGPLAN International Symposium on Memory Management, ACM, New York, NY, USA, pp. 105-117
Publication Year
2015
Authors
Daniel Clifford, Hannes Payer, Michael Stanton, Ben L. Titzer
BibTeX
Abstract
Languages that lack static typing are ubiquitous in the world of mobile and web
applications. The rapid rise of larger applications like interactive web GUIs,
games, and cryptography presents a new range of implementation challenges for
modern virtual machines to close the performance gap between typed and untyped
languages. While all languages can benefit from efficient automatic memory
management, languages like JavaScript present extra thrill with innocent-looking
but difficult features like dynamically-sized arrays, deletable properties, and
prototypes. Optimizing such languages requires complex dynamic techniques with more
radical object layout strategies such as dynamically evolving representations for
arrays. This paper presents a general approach for gathering temporal allocation
site feedback that tackles both the general problem of object lifetime estimation
and improves optimization of these problematic language features. We introduce a
new implementation technique where allocation mementos processed by the garbage
collector and runtime system efficiently tie objects back to allocation sites in
the program and dynamically estimate object lifetime, representation, and size to
inform three optimizations: pretenuring, pretransitioning, and presizing. Unlike
previous work on pretenuring, our system utilizes allocation mementos to achieve
fully dynamic allocation-site-based pretenuring in a production system. We
implement all of our techniques in V8, a high performance virtual machine for
JavaScript, and demonstrate solid performance improvements across a range of
benchmarks.
