| OLD | NEW |
| 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 5290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5301 "new limit: %" PRIuS " KB (%.1f)\n", | 5301 "new limit: %" PRIuS " KB (%.1f)\n", |
| 5302 old_gen_size / KB, old_generation_allocation_limit_ / KB, limit / KB, | 5302 old_gen_size / KB, old_generation_allocation_limit_ / KB, limit / KB, |
| 5303 factor); | 5303 factor); |
| 5304 } | 5304 } |
| 5305 old_generation_allocation_limit_ = limit; | 5305 old_generation_allocation_limit_ = limit; |
| 5306 } | 5306 } |
| 5307 } | 5307 } |
| 5308 | 5308 |
| 5309 bool Heap::ShouldOptimizeForLoadTime() { | 5309 bool Heap::ShouldOptimizeForLoadTime() { |
| 5310 return isolate()->rail_mode() == PERFORMANCE_LOAD && | 5310 return isolate()->rail_mode() == PERFORMANCE_LOAD && |
| 5311 PromotedTotalSize() < initial_old_generation_size_ && | 5311 !AllocationLimitOvershotByLargeMargin() && |
| 5312 MonotonicallyIncreasingTimeInMs() < | 5312 MonotonicallyIncreasingTimeInMs() < |
| 5313 isolate()->LoadStartTimeMs() + kMaxLoadTimeMs; | 5313 isolate()->LoadStartTimeMs() + kMaxLoadTimeMs; |
| 5314 } | 5314 } |
| 5315 | 5315 |
| 5316 // This predicate is called when an old generation space cannot allocated from | 5316 // This predicate is called when an old generation space cannot allocated from |
| 5317 // the free list and is about to add a new page. Returning false will cause a | 5317 // the free list and is about to add a new page. Returning false will cause a |
| 5318 // major GC. It happens when the old generation allocation limit is reached and | 5318 // major GC. It happens when the old generation allocation limit is reached and |
| 5319 // - either we need to optimize for memory usage, | 5319 // - either we need to optimize for memory usage, |
| 5320 // - or the incremental marking is not in progress and we cannot start it. | 5320 // - or the incremental marking is not in progress and we cannot start it. |
| 5321 bool Heap::ShouldExpandOldGenerationOnSlowAllocation() { | 5321 bool Heap::ShouldExpandOldGenerationOnSlowAllocation() { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5353 if ((FLAG_stress_compaction && (gc_count_ & 1) != 0) || | 5353 if ((FLAG_stress_compaction && (gc_count_ & 1) != 0) || |
| 5354 HighMemoryPressure()) { | 5354 HighMemoryPressure()) { |
| 5355 // If there is high memory pressure or stress testing is enabled, then | 5355 // If there is high memory pressure or stress testing is enabled, then |
| 5356 // start marking immediately. | 5356 // start marking immediately. |
| 5357 return IncrementalMarkingLimit::kHardLimit; | 5357 return IncrementalMarkingLimit::kHardLimit; |
| 5358 } | 5358 } |
| 5359 size_t old_generation_space_available = OldGenerationSpaceAvailable(); | 5359 size_t old_generation_space_available = OldGenerationSpaceAvailable(); |
| 5360 if (old_generation_space_available > new_space_->Capacity()) { | 5360 if (old_generation_space_available > new_space_->Capacity()) { |
| 5361 return IncrementalMarkingLimit::kNoLimit; | 5361 return IncrementalMarkingLimit::kNoLimit; |
| 5362 } | 5362 } |
| 5363 // We are close to the allocation limit. | 5363 if (ShouldOptimizeForMemoryUsage()) { |
| 5364 // Choose between the hard and the soft limits. | 5364 return IncrementalMarkingLimit::kHardLimit; |
| 5365 if (old_generation_space_available == 0 || ShouldOptimizeForMemoryUsage()) { | 5365 } |
| 5366 if (ShouldOptimizeForLoadTime()) { |
| 5367 return IncrementalMarkingLimit::kNoLimit; |
| 5368 } |
| 5369 if (old_generation_space_available == 0) { |
| 5366 return IncrementalMarkingLimit::kHardLimit; | 5370 return IncrementalMarkingLimit::kHardLimit; |
| 5367 } | 5371 } |
| 5368 return IncrementalMarkingLimit::kSoftLimit; | 5372 return IncrementalMarkingLimit::kSoftLimit; |
| 5369 } | 5373 } |
| 5370 | 5374 |
| 5371 void Heap::EnableInlineAllocation() { | 5375 void Heap::EnableInlineAllocation() { |
| 5372 if (!inline_allocation_disabled_) return; | 5376 if (!inline_allocation_disabled_) return; |
| 5373 inline_allocation_disabled_ = false; | 5377 inline_allocation_disabled_ = false; |
| 5374 | 5378 |
| 5375 // Update inline allocation limit for new space. | 5379 // Update inline allocation limit for new space. |
| (...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6501 } | 6505 } |
| 6502 | 6506 |
| 6503 | 6507 |
| 6504 // static | 6508 // static |
| 6505 int Heap::GetStaticVisitorIdForMap(Map* map) { | 6509 int Heap::GetStaticVisitorIdForMap(Map* map) { |
| 6506 return StaticVisitorBase::GetVisitorId(map); | 6510 return StaticVisitorBase::GetVisitorId(map); |
| 6507 } | 6511 } |
| 6508 | 6512 |
| 6509 } // namespace internal | 6513 } // namespace internal |
| 6510 } // namespace v8 | 6514 } // namespace v8 |
| OLD | NEW |