Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Side by Side Diff: src/heap/mark-compact.cc

Issue 2374253003: Revert of [heap] Remove border page (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/heap-inl.h ('k') | src/heap/spaces.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/heap/mark-compact.h" 5 #include "src/heap/mark-compact.h"
6 6
7 #include "src/base/atomicops.h" 7 #include "src/base/atomicops.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/base/sys-info.h" 9 #include "src/base/sys-info.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 3170 matching lines...) Expand 10 before | Expand all | Expand 10 after
3181 } 3181 }
3182 break; 3182 break;
3183 default: 3183 default:
3184 UNREACHABLE(); 3184 UNREACHABLE();
3185 } 3185 }
3186 } 3186 }
3187 ReportCompactionProgress(evacuation_time, saved_live_bytes); 3187 ReportCompactionProgress(evacuation_time, saved_live_bytes);
3188 if (FLAG_trace_evacuation) { 3188 if (FLAG_trace_evacuation) {
3189 PrintIsolate(heap->isolate(), 3189 PrintIsolate(heap->isolate(),
3190 "evacuation[%p]: page=%p new_space=%d " 3190 "evacuation[%p]: page=%p new_space=%d "
3191 "page_evacuation=%d executable=%d live_bytes=%d time=%f\n", 3191 "page_evacuation=%d executable=%d contains_age_mark=%d "
3192 "live_bytes=%d time=%f\n",
3192 static_cast<void*>(this), static_cast<void*>(page), 3193 static_cast<void*>(this), static_cast<void*>(page),
3193 page->InNewSpace(), 3194 page->InNewSpace(),
3194 page->IsFlagSet(Page::PAGE_NEW_OLD_PROMOTION) || 3195 page->IsFlagSet(Page::PAGE_NEW_OLD_PROMOTION) ||
3195 page->IsFlagSet(Page::PAGE_NEW_NEW_PROMOTION), 3196 page->IsFlagSet(Page::PAGE_NEW_NEW_PROMOTION),
3196 page->IsFlagSet(MemoryChunk::IS_EXECUTABLE), saved_live_bytes, 3197 page->IsFlagSet(MemoryChunk::IS_EXECUTABLE),
3197 evacuation_time); 3198 page->Contains(heap->new_space()->age_mark()),
3199 saved_live_bytes, evacuation_time);
3198 } 3200 }
3199 return success; 3201 return success;
3200 } 3202 }
3201 3203
3202 void MarkCompactCollector::Evacuator::Finalize() { 3204 void MarkCompactCollector::Evacuator::Finalize() {
3203 heap()->old_space()->MergeCompactionSpace(compaction_spaces_.Get(OLD_SPACE)); 3205 heap()->old_space()->MergeCompactionSpace(compaction_spaces_.Get(OLD_SPACE));
3204 heap()->code_space()->MergeCompactionSpace( 3206 heap()->code_space()->MergeCompactionSpace(
3205 compaction_spaces_.Get(CODE_SPACE)); 3207 compaction_spaces_.Get(CODE_SPACE));
3206 heap()->tracer()->AddCompactionEvent(duration_, bytes_compacted_); 3208 heap()->tracer()->AddCompactionEvent(duration_, bytes_compacted_);
3207 heap()->IncrementPromotedObjectsSize(new_space_visitor_.promoted_size() + 3209 heap()->IncrementPromotedObjectsSize(new_space_visitor_.promoted_size() +
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
3297 heap_, heap_->isolate()->cancelable_task_manager(), 3299 heap_, heap_->isolate()->cancelable_task_manager(),
3298 &page_parallel_job_semaphore_); 3300 &page_parallel_job_semaphore_);
3299 3301
3300 int abandoned_pages = 0; 3302 int abandoned_pages = 0;
3301 intptr_t live_bytes = 0; 3303 intptr_t live_bytes = 0;
3302 for (Page* page : evacuation_candidates_) { 3304 for (Page* page : evacuation_candidates_) {
3303 live_bytes += page->LiveBytes(); 3305 live_bytes += page->LiveBytes();
3304 job.AddPage(page, &abandoned_pages); 3306 job.AddPage(page, &abandoned_pages);
3305 } 3307 }
3306 3308
3309 const Address age_mark = heap()->new_space()->age_mark();
3307 for (Page* page : newspace_evacuation_candidates_) { 3310 for (Page* page : newspace_evacuation_candidates_) {
3308 live_bytes += page->LiveBytes(); 3311 live_bytes += page->LiveBytes();
3309 if (!page->NeverEvacuate() && 3312 if (!page->NeverEvacuate() &&
3310 (page->LiveBytes() > Evacuator::PageEvacuationThreshold())) { 3313 (page->LiveBytes() > Evacuator::PageEvacuationThreshold()) &&
3311 if (page->InIntermediateGeneration()) { 3314 !page->Contains(age_mark)) {
3315 if (page->IsFlagSet(MemoryChunk::NEW_SPACE_BELOW_AGE_MARK)) {
3312 EvacuateNewSpacePageVisitor::MoveToOldSpace(page, heap()->old_space()); 3316 EvacuateNewSpacePageVisitor::MoveToOldSpace(page, heap()->old_space());
3313 } else { 3317 } else {
3314 EvacuateNewSpacePageVisitor::MoveToToSpace(page); 3318 EvacuateNewSpacePageVisitor::MoveToToSpace(page);
3315 } 3319 }
3316 } 3320 }
3317 3321
3318 job.AddPage(page, &abandoned_pages); 3322 job.AddPage(page, &abandoned_pages);
3319 } 3323 }
3320 DCHECK_GE(job.NumberOfPages(), 1); 3324 DCHECK_GE(job.NumberOfPages(), 1);
3321 3325
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
3547 void MarkCompactCollector::EvacuateNewSpaceAndCandidates() { 3551 void MarkCompactCollector::EvacuateNewSpaceAndCandidates() {
3548 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE); 3552 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE);
3549 Heap::RelocationLock relocation_lock(heap()); 3553 Heap::RelocationLock relocation_lock(heap());
3550 3554
3551 { 3555 {
3552 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_COPY); 3556 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_COPY);
3553 EvacuationScope evacuation_scope(this); 3557 EvacuationScope evacuation_scope(this);
3554 3558
3555 EvacuateNewSpacePrologue(); 3559 EvacuateNewSpacePrologue();
3556 EvacuatePagesInParallel(); 3560 EvacuatePagesInParallel();
3557 heap()->new_space()->SealIntermediateGeneration(); 3561 heap()->new_space()->set_age_mark(heap()->new_space()->top());
3558 } 3562 }
3559 3563
3560 UpdatePointersAfterEvacuation(); 3564 UpdatePointersAfterEvacuation();
3561 3565
3562 if (!heap()->new_space()->Rebalance()) { 3566 if (!heap()->new_space()->Rebalance()) {
3563 FatalProcessOutOfMemory("NewSpace::Rebalance"); 3567 FatalProcessOutOfMemory("NewSpace::Rebalance");
3564 } 3568 }
3565 3569
3566 // Give pages that are queued to be freed back to the OS. Note that filtering 3570 // Give pages that are queued to be freed back to the OS. Note that filtering
3567 // slots only handles old space (for unboxed doubles), and thus map space can 3571 // slots only handles old space (for unboxed doubles), and thus map space can
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
4038 // The target is always in old space, we don't have to record the slot in 4042 // The target is always in old space, we don't have to record the slot in
4039 // the old-to-new remembered set. 4043 // the old-to-new remembered set.
4040 DCHECK(!heap()->InNewSpace(target)); 4044 DCHECK(!heap()->InNewSpace(target));
4041 RecordRelocSlot(host, &rinfo, target); 4045 RecordRelocSlot(host, &rinfo, target);
4042 } 4046 }
4043 } 4047 }
4044 } 4048 }
4045 4049
4046 } // namespace internal 4050 } // namespace internal
4047 } // namespace v8 4051 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap-inl.h ('k') | src/heap/spaces.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698