Allocation Folding Based on Dominance
Venue
Proceedings of the 2014 International Symposium on Memory Management, ACM, New York, NY, USA
Publication Year
2014
Authors
Daniel Clifford, Hannes Payer, Michael Starzinger, Ben L. Titzer
BibTeX
Abstract
Memory management system performance is of increasing importance in today's managed
languages. Two lingering sources of overhead are the direct costs of memory
allocations and write barriers. This paper introduces allocation folding, an
optimization technique where the virtual machine automatically folds multiple
memory allocation operations in optimized code together into a single, larger
allocation group. An allocation group comprises multiple objects and requires just
a single bounds check in a bump-pointer style allocation, rather than a check for
each individual object. More importantly, all objects allocated in a single
allocation group are guaranteed to be contiguous after allocation and thus exist in
the same generation, which makes it possible to statically remove write barriers
for reference stores involving objects in the same allocation group. Unlike object
inlining, object fusing, and object colocation, allocation folding requires no
special connectivity or ownership relation between the objects in an allocation
group. We present our analysis algorithm to determine when it is safe to fold
allocations together and discuss our implementation in V8, an open-source,
production JavaScript virtual machine. We present performance results for the
Octane and Kraken benchmark suites and show that allocation folding is a strong
performance improvement, even in the presence of some heap fragmentation.
Additionally, we use four hand-selected benchmarks JPEGEncoder, NBody, Soft3D, and
Textwriter where allocation folding has a large impact.
