Index: src/spaces.cc |
=================================================================== |
--- src/spaces.cc (revision 2713) |
+++ src/spaces.cc (working copy) |
@@ -862,8 +862,6 @@ |
ASSERT(initial_semispace_capacity <= maximum_semispace_capacity); |
ASSERT(IsPowerOf2(maximum_semispace_capacity)); |
- maximum_capacity_ = maximum_semispace_capacity; |
- capacity_ = initial_semispace_capacity; |
// Allocate and setup the histogram arrays if necessary. |
#if defined(DEBUG) || defined(ENABLE_LOGGING_AND_PROFILING) |
@@ -876,15 +874,17 @@ |
#undef SET_NAME |
#endif |
- ASSERT(size == 2 * maximum_capacity_); |
+ ASSERT(size == 2 * maximum_semispace_capacity); |
ASSERT(IsAddressAligned(start, size, 0)); |
- if (!to_space_.Setup(start, capacity_, maximum_capacity_)) { |
+ if (!to_space_.Setup(start, |
+ initial_semispace_capacity, |
+ maximum_semispace_capacity)) { |
return false; |
} |
- if (!from_space_.Setup(start + maximum_capacity_, |
- capacity_, |
- maximum_capacity_)) { |
+ if (!from_space_.Setup(start + maximum_semispace_capacity, |
+ initial_semispace_capacity, |
+ maximum_semispace_capacity)) { |
return false; |
} |
@@ -916,7 +916,6 @@ |
#endif |
start_ = NULL; |
- capacity_ = 0; |
allocation_info_.top = NULL; |
allocation_info_.limit = NULL; |
mc_forwarding_info_.top = NULL; |
@@ -952,13 +951,12 @@ |
} |
-bool NewSpace::Double() { |
- ASSERT(capacity_ <= maximum_capacity_ / 2); |
+bool NewSpace::Grow() { |
+ ASSERT(Capacity() < MaximumCapacity()); |
// TODO(1240712): Failure to double the from space can result in |
// semispaces of different sizes. In the event of that failure, the |
// to space doubling should be rolled back before returning false. |
- if (!to_space_.Double() || !from_space_.Double()) return false; |
- capacity_ *= 2; |
+ if (!to_space_.Grow() || !from_space_.Grow()) return false; |
allocation_info_.limit = to_space_.high(); |
ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_); |
return true; |
@@ -1080,11 +1078,15 @@ |
} |
-bool SemiSpace::Double() { |
- if (!MemoryAllocator::CommitBlock(high(), capacity_, executable())) { |
+bool SemiSpace::Grow() { |
+ // Commit 50% extra space but only up to maximum capacity. |
+ int maximum_extra = maximum_capacity_ - capacity_; |
+ int extra = Min(RoundUp(capacity_ / 2, OS::AllocateAlignment()), |
+ maximum_extra); |
+ if (!MemoryAllocator::CommitBlock(high(), extra, executable())) { |
return false; |
} |
- capacity_ *= 2; |
+ capacity_ += extra; |
return true; |
} |