-
Dominik Inführ authored
Since the new space is always empty after a full GC, the old-to-new remembered set is also always empty after a full GC. This means we can get rid of the sweeping_slot_set_. This slot set was used to allow the main thread to insert into the old-to-new remembered set non-atomically. The sweeping slot set was owned by the sweeper, which deletes slots in free memory from it. The main thread would start with an empty old-to-new remembered set. After sweeping both slot sets are merged again. The sweeper now needs to behave differently during a GC. When sweeping a page during full GC, the sweeper needs to delete old-to-new-slots in free memory. Outside of the GC the sweeper isn't allowed to remove from the old-to-new slots anymore. This would race with the main thread that adds slots to that remembered set while the sweeper is running. However, there should be no recorded slots in free memory. DCHECKing this is tricky though, because we would need to synchronize with the main thread right-trimming objects and at least String::MakeThin only deletes slots after the map release-store. Bug: v8:12760 Change-Id: Ic0301851a714e894c3040595f456ab93b5875c81 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3560638Reviewed-by: Michael Lippautz <mlippautz@chromium.org> Commit-Queue: Dominik Inführ <dinfuehr@chromium.org> Cr-Commit-Position: refs/heads/main@{#79713}
ca505562