[heap] New live byte tracking.
This patch changes how space size and capacity are updated in GC: - space capacity changes only when a page added/removed from the space. - space size is reset to zero before sweeping and incremented by page->live_bytes_count_ for each to-be-swept page. - space size is refined after sweeping using the accurate page->allocated_bytes counter produces by the sweeper. Invariants: 1. space.capacity = sum [page.size | for page in space]. 2. After marking, before sweeping: a) space.size = sum [page.live_bytes_count | for page in space]. 3. After sweeping, before marking ends: a) space.size = sum [page.allocated_bytes | for page in space]. b) page.allocated_bytes >= (sum [object.size | for object in page] + page.linear_allocation_area). c) page.area_size = (page.allocated_bytes + page.wasted_memory + sum [free_list_entry.size | for free_list_entry in page]. 3.b becomes equality if the mutator is not doing array trimming, object slack tracking during sweeping. Bug: chromium:694255 Change-Id: Ic8d16a8171187a113fee2df8bf3c2a4c5e77bc08 Reviewed-on: https://chromium-review.googlesource.com/618889 Commit-Queue: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Cr-Commit-Position: refs/heads/master@{#47409}
Showing
Please
register
or
sign in
to comment