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

Side by Side Diff: src/heap/heap.cc

Issue 2359903002: [heap] New heuristics for incremental marking step size. (Closed)
Patch Set: comments 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
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/heap.h" 5 #include "src/heap/heap.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/api.h" 8 #include "src/api.h"
9 #include "src/ast/context-slot-cache.h" 9 #include "src/ast/context-slot-cache.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 ms_count_(0), 108 ms_count_(0),
109 gc_count_(0), 109 gc_count_(0),
110 remembered_unmapped_pages_index_(0), 110 remembered_unmapped_pages_index_(0),
111 #ifdef DEBUG 111 #ifdef DEBUG
112 allocation_timeout_(0), 112 allocation_timeout_(0),
113 #endif // DEBUG 113 #endif // DEBUG
114 old_generation_allocation_limit_(initial_old_generation_size_), 114 old_generation_allocation_limit_(initial_old_generation_size_),
115 inline_allocation_disabled_(false), 115 inline_allocation_disabled_(false),
116 total_regexp_code_generated_(0), 116 total_regexp_code_generated_(0),
117 tracer_(nullptr), 117 tracer_(nullptr),
118 high_survival_rate_period_length_(0),
119 promoted_objects_size_(0), 118 promoted_objects_size_(0),
120 promotion_ratio_(0), 119 promotion_ratio_(0),
121 semi_space_copied_object_size_(0), 120 semi_space_copied_object_size_(0),
122 previous_semi_space_copied_object_size_(0), 121 previous_semi_space_copied_object_size_(0),
123 semi_space_copied_rate_(0), 122 semi_space_copied_rate_(0),
124 nodes_died_in_new_space_(0), 123 nodes_died_in_new_space_(0),
125 nodes_copied_in_new_space_(0), 124 nodes_copied_in_new_space_(0),
126 nodes_promoted_(0), 125 nodes_promoted_(0),
127 maximum_size_scavenges_(0), 126 maximum_size_scavenges_(0),
128 max_gc_pause_(0.0), 127 max_gc_pause_(0.0),
(...skipping 1140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 } else { 1268 } else {
1270 promotion_rate_ = 0; 1269 promotion_rate_ = 0;
1271 } 1270 }
1272 1271
1273 semi_space_copied_rate_ = 1272 semi_space_copied_rate_ =
1274 (static_cast<double>(semi_space_copied_object_size_) / 1273 (static_cast<double>(semi_space_copied_object_size_) /
1275 static_cast<double>(start_new_space_size) * 100); 1274 static_cast<double>(start_new_space_size) * 100);
1276 1275
1277 double survival_rate = promotion_ratio_ + semi_space_copied_rate_; 1276 double survival_rate = promotion_ratio_ + semi_space_copied_rate_;
1278 tracer()->AddSurvivalRatio(survival_rate); 1277 tracer()->AddSurvivalRatio(survival_rate);
1279 if (survival_rate > kYoungSurvivalRateHighThreshold) {
1280 high_survival_rate_period_length_++;
1281 } else {
1282 high_survival_rate_period_length_ = 0;
1283 }
1284 } 1278 }
1285 1279
1286 bool Heap::PerformGarbageCollection( 1280 bool Heap::PerformGarbageCollection(
1287 GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) { 1281 GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) {
1288 int freed_global_handles = 0; 1282 int freed_global_handles = 0;
1289 1283
1290 if (collector != SCAVENGER) { 1284 if (collector != SCAVENGER) {
1291 PROFILE(isolate_, CodeMovingGCEvent()); 1285 PROFILE(isolate_, CodeMovingGCEvent());
1292 } 1286 }
1293 1287
(...skipping 16 matching lines...) Expand all
1310 VMState<EXTERNAL> state(isolate_); 1304 VMState<EXTERNAL> state(isolate_);
1311 HandleScope handle_scope(isolate_); 1305 HandleScope handle_scope(isolate_);
1312 CallGCPrologueCallbacks(gc_type, kNoGCCallbackFlags); 1306 CallGCPrologueCallbacks(gc_type, kNoGCCallbackFlags);
1313 } 1307 }
1314 } 1308 }
1315 1309
1316 EnsureFromSpaceIsCommitted(); 1310 EnsureFromSpaceIsCommitted();
1317 1311
1318 int start_new_space_size = Heap::new_space()->SizeAsInt(); 1312 int start_new_space_size = Heap::new_space()->SizeAsInt();
1319 1313
1320 if (IsHighSurvivalRate()) {
1321 // We speed up the incremental marker if it is running so that it
1322 // does not fall behind the rate of promotion, which would cause a
1323 // constantly growing old space.
1324 incremental_marking()->NotifyOfHighPromotionRate();
1325 }
1326
1327 { 1314 {
1328 Heap::PretenuringScope pretenuring_scope(this); 1315 Heap::PretenuringScope pretenuring_scope(this);
1329 1316
1330 if (collector == MARK_COMPACTOR) { 1317 if (collector == MARK_COMPACTOR) {
1331 UpdateOldGenerationAllocationCounter(); 1318 UpdateOldGenerationAllocationCounter();
1332 // Perform mark-sweep with optional compaction. 1319 // Perform mark-sweep with optional compaction.
1333 MarkCompact(); 1320 MarkCompact();
1334 old_generation_size_configured_ = true; 1321 old_generation_size_configured_ = true;
1335 // This should be updated before PostGarbageCollectionProcessing, which 1322 // This should be updated before PostGarbageCollectionProcessing, which
1336 // can cause another GC. Take into account the objects promoted during GC. 1323 // can cause another GC. Take into account the objects promoted during GC.
(...skipping 5219 matching lines...) Expand 10 before | Expand all | Expand 10 after
6556 } 6543 }
6557 6544
6558 6545
6559 // static 6546 // static
6560 int Heap::GetStaticVisitorIdForMap(Map* map) { 6547 int Heap::GetStaticVisitorIdForMap(Map* map) {
6561 return StaticVisitorBase::GetVisitorId(map); 6548 return StaticVisitorBase::GetVisitorId(map);
6562 } 6549 }
6563 6550
6564 } // namespace internal 6551 } // namespace internal
6565 } // namespace v8 6552 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/incremental-marking.h » ('j') | src/heap/incremental-marking.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698