| 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;
|
| }
|
|
|
|
|