| 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 #ifndef V8_HEAP_HEAP_H_ | 5 #ifndef V8_HEAP_HEAP_H_ |
| 6 #define V8_HEAP_HEAP_H_ | 6 #define V8_HEAP_HEAP_H_ |
| 7 | 7 |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 607 | 607 |
| 608 #if V8_OS_ANDROID | 608 #if V8_OS_ANDROID |
| 609 // Don't apply pointer multiplier on Android since it has no swap space and | 609 // Don't apply pointer multiplier on Android since it has no swap space and |
| 610 // should instead adapt it's heap size based on available physical memory. | 610 // should instead adapt it's heap size based on available physical memory. |
| 611 static const int kPointerMultiplier = 1; | 611 static const int kPointerMultiplier = 1; |
| 612 #else | 612 #else |
| 613 static const int kPointerMultiplier = i::kPointerSize / 4; | 613 static const int kPointerMultiplier = i::kPointerSize / 4; |
| 614 #endif | 614 #endif |
| 615 | 615 |
| 616 // The new space size has to be a power of 2. Sizes are in MB. | 616 // The new space size has to be a power of 2. Sizes are in MB. |
| 617 static const int kMaxSemiSpaceSizeLowMemoryDevice = 1 * kPointerMultiplier; | 617 static const int kMinSemiSpaceSize = 1 * kPointerMultiplier; |
| 618 static const int kMaxSemiSpaceSizeMediumMemoryDevice = 4 * kPointerMultiplier; | 618 static const int kMaxSemiSpaceSize = 8 * kPointerMultiplier; |
| 619 static const int kMaxSemiSpaceSizeHighMemoryDevice = 8 * kPointerMultiplier; | |
| 620 static const int kMaxSemiSpaceSizeHugeMemoryDevice = 8 * kPointerMultiplier; | |
| 621 | 619 |
| 622 // The old space size has to be a multiple of Page::kPageSize. | 620 // The old space size has to be a multiple of Page::kPageSize. |
| 623 // Sizes are in MB. | 621 // Sizes are in MB. |
| 624 static const int kMaxOldSpaceSizeLowMemoryDevice = 128 * kPointerMultiplier; | 622 static const int kMinOldSpaceSize = 128 * kPointerMultiplier; |
| 625 static const int kMaxOldSpaceSizeMediumMemoryDevice = | 623 static const int kMaxOldSpaceSize = 1024 * kPointerMultiplier; |
| 626 256 * kPointerMultiplier; | |
| 627 static const int kMaxOldSpaceSizeHighMemoryDevice = 512 * kPointerMultiplier; | |
| 628 static const int kMaxOldSpaceSizeHugeMemoryDevice = 1024 * kPointerMultiplier; | |
| 629 | 624 |
| 630 static const int kTraceRingBufferSize = 512; | 625 static const int kTraceRingBufferSize = 512; |
| 631 static const int kStacktraceBufferSize = 512; | 626 static const int kStacktraceBufferSize = 512; |
| 632 | 627 |
| 633 V8_EXPORT_PRIVATE static const double kMinHeapGrowingFactor; | 628 V8_EXPORT_PRIVATE static const double kMinHeapGrowingFactor; |
| 634 V8_EXPORT_PRIVATE static const double kMaxHeapGrowingFactor; | 629 V8_EXPORT_PRIVATE static const double kMaxHeapGrowingFactor; |
| 635 static const double kMaxHeapGrowingFactorMemoryConstrained; | 630 static const double kMaxHeapGrowingFactorMemoryConstrained; |
| 636 static const double kMaxHeapGrowingFactorIdle; | 631 static const double kMaxHeapGrowingFactorIdle; |
| 637 static const double kConservativeHeapGrowingFactor; | 632 static const double kConservativeHeapGrowingFactor; |
| 638 static const double kTargetMutatorUtilization; | 633 static const double kTargetMutatorUtilization; |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 944 | 939 |
| 945 bool HasLowAllocationRate(); | 940 bool HasLowAllocationRate(); |
| 946 bool HasHighFragmentation(); | 941 bool HasHighFragmentation(); |
| 947 bool HasHighFragmentation(size_t used, size_t committed); | 942 bool HasHighFragmentation(size_t used, size_t committed); |
| 948 | 943 |
| 949 void ActivateMemoryReducerIfNeeded(); | 944 void ActivateMemoryReducerIfNeeded(); |
| 950 | 945 |
| 951 bool ShouldOptimizeForMemoryUsage(); | 946 bool ShouldOptimizeForMemoryUsage(); |
| 952 | 947 |
| 953 bool IsLowMemoryDevice() { | 948 bool IsLowMemoryDevice() { |
| 949 const int kMaxOldSpaceSizeLowMemoryDevice = 128 * kPointerMultiplier; |
| 954 return max_old_generation_size_ <= kMaxOldSpaceSizeLowMemoryDevice; | 950 return max_old_generation_size_ <= kMaxOldSpaceSizeLowMemoryDevice; |
| 955 } | 951 } |
| 956 | 952 |
| 957 bool IsMemoryConstrainedDevice() { | 953 bool IsMemoryConstrainedDevice() { |
| 954 const int kMaxOldSpaceSizeMediumMemoryDevice = 256 * kPointerMultiplier; |
| 958 return max_old_generation_size_ <= kMaxOldSpaceSizeMediumMemoryDevice; | 955 return max_old_generation_size_ <= kMaxOldSpaceSizeMediumMemoryDevice; |
| 959 } | 956 } |
| 960 | 957 |
| 961 bool HighMemoryPressure() { | 958 bool HighMemoryPressure() { |
| 962 return memory_pressure_level_.Value() != MemoryPressureLevel::kNone; | 959 return memory_pressure_level_.Value() != MemoryPressureLevel::kNone; |
| 963 } | 960 } |
| 964 | 961 |
| 965 size_t HeapLimitForDebugging() { | 962 size_t HeapLimitForDebugging() { |
| 966 const size_t kDebugHeapSizeFactor = 4; | 963 const size_t kDebugHeapSizeFactor = 4; |
| 967 size_t max_limit = std::numeric_limits<size_t>::max() / 4; | 964 size_t max_limit = std::numeric_limits<size_t>::max() / 4; |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1340 // =========================================================================== | 1337 // =========================================================================== |
| 1341 | 1338 |
| 1342 // Returns the maximum amount of memory reserved for the heap. | 1339 // Returns the maximum amount of memory reserved for the heap. |
| 1343 size_t MaxReserved() { | 1340 size_t MaxReserved() { |
| 1344 return 2 * max_semi_space_size_ + max_old_generation_size_; | 1341 return 2 * max_semi_space_size_ + max_old_generation_size_; |
| 1345 } | 1342 } |
| 1346 size_t MaxSemiSpaceSize() { return max_semi_space_size_; } | 1343 size_t MaxSemiSpaceSize() { return max_semi_space_size_; } |
| 1347 size_t InitialSemiSpaceSize() { return initial_semispace_size_; } | 1344 size_t InitialSemiSpaceSize() { return initial_semispace_size_; } |
| 1348 size_t MaxOldGenerationSize() { return max_old_generation_size_; } | 1345 size_t MaxOldGenerationSize() { return max_old_generation_size_; } |
| 1349 | 1346 |
| 1347 static size_t ComputeMaxOldGenerationSize(uint64_t physical_memory) { |
| 1348 const int old_space_physical_memory_factor = 4; |
| 1349 int computed_size = |
| 1350 static_cast<int>(physical_memory / i::MB / |
| 1351 old_space_physical_memory_factor * kPointerMultiplier); |
| 1352 return Max(Min(computed_size, kMaxOldSpaceSize), kMinOldSpaceSize); |
| 1353 } |
| 1354 |
| 1355 static size_t ComputeMaxSemiSpaceSize(uint64_t physical_memory) { |
| 1356 const uint64_t min_physical_memory = 512 * MB; |
| 1357 const uint64_t max_physical_memory = 2 * static_cast<uint64_t>(GB); |
| 1358 |
| 1359 uint64_t capped_physical_memory = |
| 1360 Max(Min(physical_memory, max_physical_memory), min_physical_memory); |
| 1361 // linearly scale max semi-space size: (X-A)/(B-A)*(D-C)+C |
| 1362 return static_cast<int>(((capped_physical_memory - min_physical_memory) * |
| 1363 (kMaxSemiSpaceSize - kMinSemiSpaceSize)) / |
| 1364 (max_physical_memory - min_physical_memory) + |
| 1365 kMinSemiSpaceSize); |
| 1366 } |
| 1367 |
| 1350 // Returns the capacity of the heap in bytes w/o growing. Heap grows when | 1368 // Returns the capacity of the heap in bytes w/o growing. Heap grows when |
| 1351 // more spaces are needed until it reaches the limit. | 1369 // more spaces are needed until it reaches the limit. |
| 1352 size_t Capacity(); | 1370 size_t Capacity(); |
| 1353 | 1371 |
| 1354 // Returns the capacity of the old generation. | 1372 // Returns the capacity of the old generation. |
| 1355 size_t OldGenerationCapacity(); | 1373 size_t OldGenerationCapacity(); |
| 1356 | 1374 |
| 1357 // Returns the amount of memory currently committed for the heap. | 1375 // Returns the amount of memory currently committed for the heap. |
| 1358 size_t CommittedMemory(); | 1376 size_t CommittedMemory(); |
| 1359 | 1377 |
| (...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2637 friend class PagedSpace; | 2655 friend class PagedSpace; |
| 2638 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); | 2656 DISALLOW_COPY_AND_ASSIGN(AllocationObserver); |
| 2639 }; | 2657 }; |
| 2640 | 2658 |
| 2641 V8_EXPORT_PRIVATE const char* AllocationSpaceName(AllocationSpace space); | 2659 V8_EXPORT_PRIVATE const char* AllocationSpaceName(AllocationSpace space); |
| 2642 | 2660 |
| 2643 } // namespace internal | 2661 } // namespace internal |
| 2644 } // namespace v8 | 2662 } // namespace v8 |
| 2645 | 2663 |
| 2646 #endif // V8_HEAP_HEAP_H_ | 2664 #endif // V8_HEAP_HEAP_H_ |
| OLD | NEW |