-
sigbjornf authored
This implements heap compaction for the Blink GC infrastructure (Oilpan), compacting the arenas of the BlinkGC heap which are most susceptible to becoming fragmented during actual use. Fragmentation is a real problem and a growing one while browsing anything but static pages: the amount of unused, but allocated, memory is fluctuating higher over time. To avoid leaving increasing amounts of unused holes in our heaps, heap compaction will periodically squeeze out the unused portions, packing together the live objects. The heap pages that are then left as unused, are subsequently released and returned to the OS. Due to a fortunate property of Blink heap collection types, providing such compaction is within relatively easy reach. Experiments show that the arenas which hold such collection objects ("backing stores") are the ones that develop fragmentation the most & persistently. While not a complete heap compactor of all Blink GC arenas, it addresses the fragmentation problem where it is most pressing. More can be done, later. Explainer / design document: https://docs.google.com/document/d/1k-vivOinomDXnScw8Ew5zpsYCXiYqj76OCOYZSvHkaU R=haraken BUG=672030 Review-Url: https://codereview.chromium.org/2531973002 Cr-Commit-Position: refs/heads/master@{#438125}2c7d13f7