Commit 234c904d authored by Dominik Inführ's avatar Dominik Inführ Committed by V8 LUCI CQ

[heap] Do not zap freed memory in NotifyObjectSizeChange

Avoid zapping freed memory in NotifyObjectSizeChange. This fixes the
linked performance regression introduced with
https://crrrev.com/c/3607992. Beginning with that CL we would always
zap freed memory on the main thread, while previously we only did this
in CreateFillerForArray when the FixedArray could actually contain
references.

While we could restore the previous behaviour as well, we simply stop
zapping freed memory in NotifyObjectSizeChange altogether for better
throughput. The reason for zapping was to reduce floating garbage.
However this is only relevant for incremental marking which is only
enabled for about <1% of the overall runtime.

Bug: v8:12578, chromium:1322882
Change-Id: I004ee712b924c53edac87810504d04aa7f4a50d8
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3634960Reviewed-by: 's avatarMichael Lippautz <mlippautz@chromium.org>
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80438}
parent eac584cd
...@@ -3978,12 +3978,12 @@ void Heap::NotifyObjectSizeChange(HeapObject object, int old_size, int new_size, ...@@ -3978,12 +3978,12 @@ void Heap::NotifyObjectSizeChange(HeapObject object, int old_size, int new_size,
DCHECK_IMPLIES(is_background, DCHECK_IMPLIES(is_background,
clear_recorded_slots == ClearRecordedSlots::kNo); clear_recorded_slots == ClearRecordedSlots::kNo);
const ClearFreedMemoryMode clear_memory_mode =
is_background ? ClearFreedMemoryMode::kDontClearFreedMemory
: ClearFreedMemoryMode::kClearFreedMemory;
const VerifyNoSlotsRecorded verify_no_slots_recorded = const VerifyNoSlotsRecorded verify_no_slots_recorded =
is_background ? VerifyNoSlotsRecorded::kNo : VerifyNoSlotsRecorded::kYes; is_background ? VerifyNoSlotsRecorded::kNo : VerifyNoSlotsRecorded::kYes;
const ClearFreedMemoryMode clear_memory_mode =
ClearFreedMemoryMode::kDontClearFreedMemory;
const Address filler = object.address() + new_size; const Address filler = object.address() + new_size;
const int filler_size = old_size - new_size; const int filler_size = old_size - new_size;
CreateFillerObjectAtRaw(filler, filler_size, clear_memory_mode, CreateFillerObjectAtRaw(filler, filler_size, clear_memory_mode,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment