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

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

Issue 2383443002: Revert of [heap] Remove border page (Closed)
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 3129 matching lines...) Expand 10 before | Expand all | Expand 10 after
3140 } 3140 }
3141 break; 3141 break;
3142 default: 3142 default:
3143 UNREACHABLE(); 3143 UNREACHABLE();
3144 } 3144 }
3145 } 3145 }
3146 ReportCompactionProgress(evacuation_time, saved_live_bytes); 3146 ReportCompactionProgress(evacuation_time, saved_live_bytes);
3147 if (FLAG_trace_evacuation) { 3147 if (FLAG_trace_evacuation) {
3148 PrintIsolate(heap->isolate(), 3148 PrintIsolate(heap->isolate(),
3149 "evacuation[%p]: page=%p new_space=%d " 3149 "evacuation[%p]: page=%p new_space=%d "
3150 "page_evacuation=%d executable=%d live_bytes=%d time=%f\n", 3150 "page_evacuation=%d executable=%d contains_age_mark=%d "
3151 "live_bytes=%d time=%f\n",
3151 static_cast<void*>(this), static_cast<void*>(page), 3152 static_cast<void*>(this), static_cast<void*>(page),
3152 page->InNewSpace(), 3153 page->InNewSpace(),
3153 page->IsFlagSet(Page::PAGE_NEW_OLD_PROMOTION) || 3154 page->IsFlagSet(Page::PAGE_NEW_OLD_PROMOTION) ||
3154 page->IsFlagSet(Page::PAGE_NEW_NEW_PROMOTION), 3155 page->IsFlagSet(Page::PAGE_NEW_NEW_PROMOTION),
3155 page->IsFlagSet(MemoryChunk::IS_EXECUTABLE), saved_live_bytes, 3156 page->IsFlagSet(MemoryChunk::IS_EXECUTABLE),
3156 evacuation_time); 3157 page->Contains(heap->new_space()->age_mark()),
3158 saved_live_bytes, evacuation_time);
3157 } 3159 }
3158 return success; 3160 return success;
3159 } 3161 }
3160 3162
3161 void MarkCompactCollector::Evacuator::Finalize() { 3163 void MarkCompactCollector::Evacuator::Finalize() {
3162 heap()->old_space()->MergeCompactionSpace(compaction_spaces_.Get(OLD_SPACE)); 3164 heap()->old_space()->MergeCompactionSpace(compaction_spaces_.Get(OLD_SPACE));
3163 heap()->code_space()->MergeCompactionSpace( 3165 heap()->code_space()->MergeCompactionSpace(
3164 compaction_spaces_.Get(CODE_SPACE)); 3166 compaction_spaces_.Get(CODE_SPACE));
3165 heap()->tracer()->AddCompactionEvent(duration_, bytes_compacted_); 3167 heap()->tracer()->AddCompactionEvent(duration_, bytes_compacted_);
3166 heap()->IncrementPromotedObjectsSize(new_space_visitor_.promoted_size() + 3168 heap()->IncrementPromotedObjectsSize(new_space_visitor_.promoted_size() +
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
3257 &page_parallel_job_semaphore_); 3259 &page_parallel_job_semaphore_);
3258 3260
3259 int abandoned_pages = 0; 3261 int abandoned_pages = 0;
3260 intptr_t live_bytes = 0; 3262 intptr_t live_bytes = 0;
3261 for (Page* page : evacuation_candidates_) { 3263 for (Page* page : evacuation_candidates_) {
3262 live_bytes += page->LiveBytes(); 3264 live_bytes += page->LiveBytes();
3263 job.AddPage(page, &abandoned_pages); 3265 job.AddPage(page, &abandoned_pages);
3264 } 3266 }
3265 3267
3266 const bool reduce_memory = heap()->ShouldReduceMemory(); 3268 const bool reduce_memory = heap()->ShouldReduceMemory();
3269 const Address age_mark = heap()->new_space()->age_mark();
3267 for (Page* page : newspace_evacuation_candidates_) { 3270 for (Page* page : newspace_evacuation_candidates_) {
3268 live_bytes += page->LiveBytes(); 3271 live_bytes += page->LiveBytes();
3269 if (!reduce_memory && !page->NeverEvacuate() && 3272 if (!reduce_memory && !page->NeverEvacuate() &&
3270 (page->LiveBytes() > Evacuator::PageEvacuationThreshold())) { 3273 (page->LiveBytes() > Evacuator::PageEvacuationThreshold()) &&
3271 if (page->InIntermediateGeneration()) { 3274 !page->Contains(age_mark)) {
3275 if (page->IsFlagSet(MemoryChunk::NEW_SPACE_BELOW_AGE_MARK)) {
3272 EvacuateNewSpacePageVisitor::MoveToOldSpace(page, heap()->old_space()); 3276 EvacuateNewSpacePageVisitor::MoveToOldSpace(page, heap()->old_space());
3273 } else { 3277 } else {
3274 EvacuateNewSpacePageVisitor::MoveToToSpace(page); 3278 EvacuateNewSpacePageVisitor::MoveToToSpace(page);
3275 } 3279 }
3276 } 3280 }
3277 3281
3278 job.AddPage(page, &abandoned_pages); 3282 job.AddPage(page, &abandoned_pages);
3279 } 3283 }
3280 DCHECK_GE(job.NumberOfPages(), 1); 3284 DCHECK_GE(job.NumberOfPages(), 1);
3281 3285
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
3507 void MarkCompactCollector::EvacuateNewSpaceAndCandidates() { 3511 void MarkCompactCollector::EvacuateNewSpaceAndCandidates() {
3508 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE); 3512 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE);
3509 Heap::RelocationLock relocation_lock(heap()); 3513 Heap::RelocationLock relocation_lock(heap());
3510 3514
3511 { 3515 {
3512 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_COPY); 3516 TRACE_GC(heap()->tracer(), GCTracer::Scope::MC_EVACUATE_COPY);
3513 EvacuationScope evacuation_scope(this); 3517 EvacuationScope evacuation_scope(this);
3514 3518
3515 EvacuateNewSpacePrologue(); 3519 EvacuateNewSpacePrologue();
3516 EvacuatePagesInParallel(); 3520 EvacuatePagesInParallel();
3517 heap()->new_space()->SealIntermediateGeneration(); 3521 heap()->new_space()->set_age_mark(heap()->new_space()->top());
3518 } 3522 }
3519 3523
3520 UpdatePointersAfterEvacuation(); 3524 UpdatePointersAfterEvacuation();
3521 3525
3522 if (!heap()->new_space()->Rebalance()) { 3526 if (!heap()->new_space()->Rebalance()) {
3523 FatalProcessOutOfMemory("NewSpace::Rebalance"); 3527 FatalProcessOutOfMemory("NewSpace::Rebalance");
3524 } 3528 }
3525 3529
3526 // Give pages that are queued to be freed back to the OS. Note that filtering 3530 // Give pages that are queued to be freed back to the OS. Note that filtering
3527 // slots only handles old space (for unboxed doubles), and thus map space can 3531 // slots only handles old space (for unboxed doubles), and thus map space can
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
3994 // The target is always in old space, we don't have to record the slot in 3998 // The target is always in old space, we don't have to record the slot in
3995 // the old-to-new remembered set. 3999 // the old-to-new remembered set.
3996 DCHECK(!heap()->InNewSpace(target)); 4000 DCHECK(!heap()->InNewSpace(target));
3997 RecordRelocSlot(host, &rinfo, target); 4001 RecordRelocSlot(host, &rinfo, target);
3998 } 4002 }
3999 } 4003 }
4000 } 4004 }
4001 4005
4002 } // namespace internal 4006 } // namespace internal
4003 } // namespace v8 4007 } // 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