Revision: 2667
Author: [email protected]
Date: Wed Aug 12 06:54:43 2009
Log: - Reduced the maximum capacity of a semi space from 8MB to 4MB.
- Changed the semi space growth policy from doubling to increasing by 50%.
This slows down V8BenchmarkSuite with 1.32% but reduces the memory  
footprint with 8MB per V8 instance.

Review URL: http://codereview.chromium.org/164397
http://code.google.com/p/v8/source/detail?r=2667

Modified:
  /branches/bleeding_edge/src/heap.cc
  /branches/bleeding_edge/src/spaces.cc
  /branches/bleeding_edge/src/spaces.h

=======================================
--- /branches/bleeding_edge/src/heap.cc Thu Aug  6 03:22:38 2009
+++ /branches/bleeding_edge/src/heap.cc Wed Aug 12 06:54:43 2009
@@ -74,7 +74,7 @@
  int Heap::old_generation_size_ = 128*MB;
  int Heap::initial_semispace_size_ = 128*KB;
  #else
-int Heap::semispace_size_  = 8*MB;
+int Heap::semispace_size_  = 4*MB;
  int Heap::old_generation_size_ = 512*MB;
  int Heap::initial_semispace_size_ = 512*KB;
  #endif
@@ -641,11 +641,11 @@

    if (new_space_.Capacity() < new_space_.MaximumCapacity() &&
        survived_since_last_expansion_ > new_space_.Capacity()) {
-    // Double the size of new space if there is room to grow and enough
+    // Grow the size of new space if there is room to grow and enough
      // data has survived scavenge since the last expansion.
-    // TODO(1240712): NewSpace::Double has a return value which is
+    // TODO(1240712): NewSpace::Grow has a return value which is
      // ignored here.
-    new_space_.Double();
+    new_space_.Grow();
      survived_since_last_expansion_ = 0;
    }

=======================================
--- /branches/bleeding_edge/src/spaces.cc       Thu Jul 23 05:51:49 2009
+++ /branches/bleeding_edge/src/spaces.cc       Wed Aug 12 06:54:43 2009
@@ -963,13 +963,13 @@
  }


-bool NewSpace::Double() {
-  ASSERT(capacity_ <= maximum_capacity_ / 2);
+bool NewSpace::Grow() {
+  ASSERT(capacity_ < maximum_capacity_);
    // 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;
+  capacity_ = to_space_.Capacity() + from_space_.Capacity();
    allocation_info_.limit = to_space_.high();
    ASSERT_SEMISPACE_ALLOCATION_INFO(allocation_info_, to_space_);
    return true;
@@ -1074,11 +1074,16 @@
  }


-bool SemiSpace::Double() {
-  if (!MemoryAllocator::CommitBlock(high(), capacity_, executable())) {
+bool SemiSpace::Grow() {
+  // Commit 50% extra space but only up to maximum capacity.
+  int extra = capacity_/2;
+  if (capacity_ + extra > maximum_capacity_) {
+    extra = maximum_capacity_ - capacity_;
+  }
+  if (!MemoryAllocator::CommitBlock(high(), extra, executable())) {
      return false;
    }
-  capacity_ *= 2;
+  capacity_ += extra;
    return true;
  }

=======================================
--- /branches/bleeding_edge/src/spaces.h        Mon Aug  3 04:05:26 2009
+++ /branches/bleeding_edge/src/spaces.h        Wed Aug 12 06:54:43 2009
@@ -997,11 +997,11 @@
    // True if the space has been set up but not torn down.
    bool HasBeenSetup() { return start_ != NULL; }

-  // Double the size of the semispace by committing extra virtual memory.
+  // Grow the size of the semispace by committing extra virtual memory.
    // Assumes that the caller has checked that the semispace has not reached
    // its maximum capacity (and thus there is space available in the  
reserved
    // address range to grow).
-  bool Double();
+  bool Grow();

    // Returns the start address of the space.
    Address low() { return start_; }
@@ -1039,6 +1039,9 @@
    virtual void Print();
    virtual void Verify();
  #endif
+
+  // Returns the current capacity of the semi space.
+  int Capacity() { return capacity_; }

   private:
    // The current and maximum capacity of the space.
@@ -1131,9 +1134,9 @@
    // Flip the pair of spaces.
    void Flip();

-  // Doubles the capacity of the semispaces.  Assumes that they are not at
+  // Grow the capacity of the semispaces.  Assumes that they are not at
    // their maximum capacity.  Returns a flag indicating success or failure.
-  bool Double();
+  bool Grow();

    // True if the address or object lies in the address range of either
    // semispace (not necessarily below the allocation pointer).

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to