Index: src/heap/heap.h |
diff --git a/src/heap/heap.h b/src/heap/heap.h |
index a1cb4d22bef229aef7dffe7ce85807a1791c0733..e7da4c6d8436aa97669fe2346d539c616fe9bb04 100644 |
--- a/src/heap/heap.h |
+++ b/src/heap/heap.h |
@@ -614,18 +614,13 @@ class Heap { |
#endif |
// The new space size has to be a power of 2. Sizes are in MB. |
- static const int kMaxSemiSpaceSizeLowMemoryDevice = 1 * kPointerMultiplier; |
- static const int kMaxSemiSpaceSizeMediumMemoryDevice = 4 * kPointerMultiplier; |
- static const int kMaxSemiSpaceSizeHighMemoryDevice = 8 * kPointerMultiplier; |
- static const int kMaxSemiSpaceSizeHugeMemoryDevice = 8 * kPointerMultiplier; |
+ static const int kMinSemiSpaceSize = 1 * kPointerMultiplier; |
+ static const int kMaxSemiSpaceSize = 8 * kPointerMultiplier; |
// The old space size has to be a multiple of Page::kPageSize. |
// Sizes are in MB. |
- static const int kMaxOldSpaceSizeLowMemoryDevice = 128 * kPointerMultiplier; |
- static const int kMaxOldSpaceSizeMediumMemoryDevice = |
- 256 * kPointerMultiplier; |
- static const int kMaxOldSpaceSizeHighMemoryDevice = 512 * kPointerMultiplier; |
- static const int kMaxOldSpaceSizeHugeMemoryDevice = 1024 * kPointerMultiplier; |
+ static const int kMinOldSpaceSize = 128 * kPointerMultiplier; |
+ static const int kMaxOldSpaceSize = 1024 * kPointerMultiplier; |
static const int kTraceRingBufferSize = 512; |
static const int kStacktraceBufferSize = 512; |
@@ -951,10 +946,12 @@ class Heap { |
bool ShouldOptimizeForMemoryUsage(); |
bool IsLowMemoryDevice() { |
+ const int kMaxOldSpaceSizeLowMemoryDevice = 128 * kPointerMultiplier; |
return max_old_generation_size_ <= kMaxOldSpaceSizeLowMemoryDevice; |
} |
bool IsMemoryConstrainedDevice() { |
+ const int kMaxOldSpaceSizeMediumMemoryDevice = 256 * kPointerMultiplier; |
return max_old_generation_size_ <= kMaxOldSpaceSizeMediumMemoryDevice; |
} |
@@ -1347,6 +1344,27 @@ class Heap { |
size_t InitialSemiSpaceSize() { return initial_semispace_size_; } |
size_t MaxOldGenerationSize() { return max_old_generation_size_; } |
+ static size_t ComputeMaxOldGenerationSize(uint64_t physical_memory) { |
+ const int old_space_physical_memory_factor = 4; |
+ int computed_size = |
+ static_cast<int>(physical_memory / i::MB / |
+ old_space_physical_memory_factor * kPointerMultiplier); |
+ return Max(Min(computed_size, kMaxOldSpaceSize), kMinOldSpaceSize); |
+ } |
+ |
+ static size_t ComputeMaxSemiSpaceSize(uint64_t physical_memory) { |
+ const uint64_t min_physical_memory = 512 * MB; |
+ const uint64_t max_physical_memory = 2 * static_cast<uint64_t>(GB); |
+ |
+ uint64_t capped_physical_memory = |
+ Max(Min(physical_memory, max_physical_memory), min_physical_memory); |
+ // linearly scale max semi-space size: (X-A)/(B-A)*(D-C)+C |
+ return static_cast<int>(((capped_physical_memory - min_physical_memory) * |
+ (kMaxSemiSpaceSize - kMinSemiSpaceSize)) / |
+ (max_physical_memory - min_physical_memory) + |
+ kMinSemiSpaceSize); |
+ } |
+ |
// Returns the capacity of the heap in bytes w/o growing. Heap grows when |
// more spaces are needed until it reaches the limit. |
size_t Capacity(); |