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

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

Issue 849693004: Use more conservative average promotion ratio for initial heap size. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 11 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/gc-tracer.cc ('k') | no next file » | 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/v8.h" 5 #include "src/v8.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/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/once.h" 10 #include "src/base/once.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 amount_of_external_allocated_memory_at_last_global_gc_(0), 60 amount_of_external_allocated_memory_at_last_global_gc_(0),
61 isolate_(NULL), 61 isolate_(NULL),
62 code_range_size_(0), 62 code_range_size_(0),
63 // semispace_size_ should be a power of 2 and old_generation_size_ should 63 // semispace_size_ should be a power of 2 and old_generation_size_ should
64 // be a multiple of Page::kPageSize. 64 // be a multiple of Page::kPageSize.
65 reserved_semispace_size_(8 * (kPointerSize / 4) * MB), 65 reserved_semispace_size_(8 * (kPointerSize / 4) * MB),
66 max_semi_space_size_(8 * (kPointerSize / 4) * MB), 66 max_semi_space_size_(8 * (kPointerSize / 4) * MB),
67 initial_semispace_size_(Page::kPageSize), 67 initial_semispace_size_(Page::kPageSize),
68 target_semispace_size_(Page::kPageSize), 68 target_semispace_size_(Page::kPageSize),
69 max_old_generation_size_(700ul * (kPointerSize / 4) * MB), 69 max_old_generation_size_(700ul * (kPointerSize / 4) * MB),
70 initial_old_generation_size_(max_old_generation_size_ / 2), 70 initial_old_generation_size_(max_old_generation_size_),
71 old_generation_size_configured_(false), 71 old_generation_size_configured_(false),
72 max_executable_size_(256ul * (kPointerSize / 4) * MB), 72 max_executable_size_(256ul * (kPointerSize / 4) * MB),
73 // Variables set based on semispace_size_ and old_generation_size_ in 73 // Variables set based on semispace_size_ and old_generation_size_ in
74 // ConfigureHeap. 74 // ConfigureHeap.
75 // Will be 4 * reserved_semispace_size_ to ensure that young 75 // Will be 4 * reserved_semispace_size_ to ensure that young
76 // generation can be aligned to its size. 76 // generation can be aligned to its size.
77 maximum_committed_(0), 77 maximum_committed_(0),
78 survived_since_last_expansion_(0), 78 survived_since_last_expansion_(0),
79 survived_last_scavenge_(0), 79 survived_last_scavenge_(0),
80 sweep_generation_(0), 80 sweep_generation_(0),
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 } 1041 }
1042 } 1042 }
1043 1043
1044 1044
1045 void Heap::UpdateSurvivalStatistics(int start_new_space_size) { 1045 void Heap::UpdateSurvivalStatistics(int start_new_space_size) {
1046 if (start_new_space_size == 0) return; 1046 if (start_new_space_size == 0) return;
1047 1047
1048 promotion_ratio_ = (static_cast<double>(promoted_objects_size_) / 1048 promotion_ratio_ = (static_cast<double>(promoted_objects_size_) /
1049 static_cast<double>(start_new_space_size) * 100); 1049 static_cast<double>(start_new_space_size) * 100);
1050 1050
1051 if (gc_count_ > 1) tracer()->AddPromotionRatio(promotion_ratio_);
1052
1051 if (previous_semi_space_copied_object_size_ > 0) { 1053 if (previous_semi_space_copied_object_size_ > 0) {
1052 promotion_rate_ = 1054 promotion_rate_ =
1053 (static_cast<double>(promoted_objects_size_) / 1055 (static_cast<double>(promoted_objects_size_) /
1054 static_cast<double>(previous_semi_space_copied_object_size_) * 100); 1056 static_cast<double>(previous_semi_space_copied_object_size_) * 100);
1055 } else { 1057 } else {
1056 promotion_rate_ = 0; 1058 promotion_rate_ = 0;
1057 } 1059 }
1058 1060
1059 semi_space_copied_rate_ = 1061 semi_space_copied_rate_ =
1060 (static_cast<double>(semi_space_copied_object_size_) / 1062 (static_cast<double>(semi_space_copied_object_size_) /
1061 static_cast<double>(start_new_space_size) * 100); 1063 static_cast<double>(start_new_space_size) * 100);
1062 1064
1063 double survival_rate = promotion_ratio_ + semi_space_copied_rate_; 1065 double survival_rate = promotion_ratio_ + semi_space_copied_rate_;
1064 tracer()->AddSurvivalRate(survival_rate);
1065
1066 if (survival_rate > kYoungSurvivalRateHighThreshold) { 1066 if (survival_rate > kYoungSurvivalRateHighThreshold) {
1067 high_survival_rate_period_length_++; 1067 high_survival_rate_period_length_++;
1068 } else { 1068 } else {
1069 high_survival_rate_period_length_ = 0; 1069 high_survival_rate_period_length_ = 0;
1070 } 1070 }
1071 } 1071 }
1072 1072
1073 bool Heap::PerformGarbageCollection( 1073 bool Heap::PerformGarbageCollection(
1074 GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) { 1074 GarbageCollector collector, const v8::GCCallbackFlags gc_callback_flags) {
1075 int freed_global_handles = 0; 1075 int freed_global_handles = 0;
(...skipping 1289 matching lines...) Expand 10 before | Expand all | Expand 10 after
2365 map->GetHeap()->DoScavengeObject(map, p, object); 2365 map->GetHeap()->DoScavengeObject(map, p, object);
2366 } 2366 }
2367 2367
2368 2368
2369 void Heap::ConfigureInitialOldGenerationSize() { 2369 void Heap::ConfigureInitialOldGenerationSize() {
2370 if (!old_generation_size_configured_ && tracer()->SurvivalEventsRecorded()) { 2370 if (!old_generation_size_configured_ && tracer()->SurvivalEventsRecorded()) {
2371 old_generation_allocation_limit_ = 2371 old_generation_allocation_limit_ =
2372 Max(kMinimumOldGenerationAllocationLimit, 2372 Max(kMinimumOldGenerationAllocationLimit,
2373 static_cast<intptr_t>( 2373 static_cast<intptr_t>(
2374 static_cast<double>(initial_old_generation_size_) * 2374 static_cast<double>(initial_old_generation_size_) *
2375 (tracer()->AverageSurvivalRate() / 100))); 2375 (tracer()->AveragePromotionRatio() / 100)));
2376 } 2376 }
2377 } 2377 }
2378 2378
2379 2379
2380 AllocationResult Heap::AllocatePartialMap(InstanceType instance_type, 2380 AllocationResult Heap::AllocatePartialMap(InstanceType instance_type,
2381 int instance_size) { 2381 int instance_size) {
2382 Object* result; 2382 Object* result;
2383 AllocationResult allocation = AllocateRaw(Map::kSize, MAP_SPACE, MAP_SPACE); 2383 AllocationResult allocation = AllocateRaw(Map::kSize, MAP_SPACE, MAP_SPACE);
2384 if (!allocation.To(&result)) return allocation; 2384 if (!allocation.To(&result)) return allocation;
2385 2385
(...skipping 4052 matching lines...) Expand 10 before | Expand all | Expand 10 after
6438 static_cast<int>(object_sizes_last_time_[index])); 6438 static_cast<int>(object_sizes_last_time_[index]));
6439 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT) 6439 CODE_AGE_LIST_COMPLETE(ADJUST_LAST_TIME_OBJECT_COUNT)
6440 #undef ADJUST_LAST_TIME_OBJECT_COUNT 6440 #undef ADJUST_LAST_TIME_OBJECT_COUNT
6441 6441
6442 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_)); 6442 MemCopy(object_counts_last_time_, object_counts_, sizeof(object_counts_));
6443 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_)); 6443 MemCopy(object_sizes_last_time_, object_sizes_, sizeof(object_sizes_));
6444 ClearObjectStats(); 6444 ClearObjectStats();
6445 } 6445 }
6446 } 6446 }
6447 } // namespace v8::internal 6447 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/heap/gc-tracer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698