[heap] Only reclaim inaccessible memory when reducing memory.
Bug: chromium:897074 Change-Id: I65894046064a230847f3e629e56d8a171546aa51 Reviewed-on: https://chromium-review.googlesource.com/c/1293950 Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Commit-Queue: Hannes Payer <hpayer@chromium.org> Cr-Commit-Position: refs/heads/master@{#56877}
This commit is contained in:
parent
b8320b6f6a
commit
499efdfd40
@ -15,6 +15,20 @@
|
||||
namespace v8 {
|
||||
namespace internal {
|
||||
|
||||
Sweeper::Sweeper(Heap* heap, MajorNonAtomicMarkingState* marking_state)
|
||||
: heap_(heap),
|
||||
marking_state_(marking_state),
|
||||
num_tasks_(0),
|
||||
pending_sweeper_tasks_semaphore_(0),
|
||||
incremental_sweeper_pending_(false),
|
||||
sweeping_in_progress_(false),
|
||||
num_sweeping_tasks_(0),
|
||||
stop_sweeper_tasks_(false),
|
||||
iterability_task_semaphore_(0),
|
||||
iterability_in_progress_(false),
|
||||
iterability_task_started_(false),
|
||||
should_reduce_memory_(heap->ShouldReduceMemory()) {}
|
||||
|
||||
Sweeper::PauseOrCompleteScope::PauseOrCompleteScope(Sweeper* sweeper)
|
||||
: sweeper_(sweeper) {
|
||||
sweeper_->stop_sweeper_tasks_ = true;
|
||||
@ -289,7 +303,7 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
|
||||
free_start, static_cast<int>(size), ClearRecordedSlots::kNo,
|
||||
ClearFreedMemoryMode::kClearFreedMemory);
|
||||
}
|
||||
p->DiscardUnusedMemory(free_start, size);
|
||||
if (should_reduce_memory_) p->DiscardUnusedMemory(free_start, size);
|
||||
RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, free_end,
|
||||
SlotSet::KEEP_EMPTY_BUCKETS);
|
||||
RememberedSet<OLD_TO_OLD>::RemoveRange(p, free_start, free_end,
|
||||
@ -330,7 +344,7 @@ int Sweeper::RawSweep(Page* p, FreeListRebuildingMode free_list_mode,
|
||||
ClearRecordedSlots::kNo,
|
||||
ClearFreedMemoryMode::kClearFreedMemory);
|
||||
}
|
||||
p->DiscardUnusedMemory(free_start, size);
|
||||
if (should_reduce_memory_) p->DiscardUnusedMemory(free_start, size);
|
||||
RememberedSet<OLD_TO_NEW>::RemoveRange(p, free_start, p->area_end(),
|
||||
SlotSet::KEEP_EMPTY_BUCKETS);
|
||||
RememberedSet<OLD_TO_OLD>::RemoveRange(p, free_start, p->area_end(),
|
||||
|
@ -77,18 +77,7 @@ class Sweeper {
|
||||
};
|
||||
enum AddPageMode { REGULAR, READD_TEMPORARY_REMOVED_PAGE };
|
||||
|
||||
Sweeper(Heap* heap, MajorNonAtomicMarkingState* marking_state)
|
||||
: heap_(heap),
|
||||
marking_state_(marking_state),
|
||||
num_tasks_(0),
|
||||
pending_sweeper_tasks_semaphore_(0),
|
||||
incremental_sweeper_pending_(false),
|
||||
sweeping_in_progress_(false),
|
||||
num_sweeping_tasks_(0),
|
||||
stop_sweeper_tasks_(false),
|
||||
iterability_task_semaphore_(0),
|
||||
iterability_in_progress_(false),
|
||||
iterability_task_started_(false) {}
|
||||
Sweeper(Heap* heap, MajorNonAtomicMarkingState* marking_state);
|
||||
|
||||
bool sweeping_in_progress() const { return sweeping_in_progress_; }
|
||||
|
||||
@ -196,6 +185,7 @@ class Sweeper {
|
||||
base::Semaphore iterability_task_semaphore_;
|
||||
bool iterability_in_progress_;
|
||||
bool iterability_task_started_;
|
||||
bool should_reduce_memory_;
|
||||
};
|
||||
|
||||
} // namespace internal
|
||||
|
Loading…
Reference in New Issue
Block a user