src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp

changeset 698
12eea04c8b06
parent 448
183f41cf8bfe
child 704
850fdf70db2b
     1.1 --- a/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp	Fri Jun 27 19:12:11 2008 -0700
     1.2 +++ b/src/share/vm/gc_implementation/parNew/asParNewGeneration.cpp	Wed Jul 09 15:08:55 2008 -0700
     1.3 @@ -162,10 +162,9 @@
     1.4      // Grow the generation
     1.5      size_t change = desired_size - orig_size;
     1.6      assert(change % alignment == 0, "just checking");
     1.7 -    if (!virtual_space()->expand_by(change)) {
     1.8 +    if (expand(change)) {
     1.9        return false; // Error if we fail to resize!
    1.10      }
    1.11 -
    1.12      size_changed = true;
    1.13    } else if (desired_size < orig_size) {
    1.14      size_t desired_change = orig_size - desired_size;
    1.15 @@ -222,7 +221,9 @@
    1.16      // Was there a shrink of the survivor space?
    1.17      if (new_end < to()->end()) {
    1.18        MemRegion mr(to()->bottom(), new_end);
    1.19 -      to()->initialize(mr, false /* clear */);
    1.20 +      to()->initialize(mr,
    1.21 +                       SpaceDecorator::DontClear,
    1.22 +                       SpaceDecorator::DontMangle);
    1.23      }
    1.24    }
    1.25  }
    1.26 @@ -322,9 +323,7 @@
    1.27                         pointer_delta(from_start, eden_start, sizeof(char)));
    1.28      }
    1.29  
    1.30 -// tty->print_cr("eden_size before: " SIZE_FORMAT, eden_size);
    1.31      eden_size = align_size_down(eden_size, alignment);
    1.32 -// tty->print_cr("eden_size after: " SIZE_FORMAT, eden_size);
    1.33      eden_end = eden_start + eden_size;
    1.34      assert(eden_end >= eden_start, "addition overflowed")
    1.35  
    1.36 @@ -501,11 +500,31 @@
    1.37    size_t old_from = from()->capacity();
    1.38    size_t old_to   = to()->capacity();
    1.39  
    1.40 +  // If not clearing the spaces, do some checking to verify that
    1.41 +  // the spaces are already mangled.
    1.42 +
    1.43 +  // Must check mangling before the spaces are reshaped.  Otherwise,
    1.44 +  // the bottom or end of one space may have moved into another
    1.45 +  // a failure of the check may not correctly indicate which space
    1.46 +  // is not properly mangled.
    1.47 +  if (ZapUnusedHeapArea) {
    1.48 +    HeapWord* limit = (HeapWord*) virtual_space()->high();
    1.49 +    eden()->check_mangled_unused_area(limit);
    1.50 +    from()->check_mangled_unused_area(limit);
    1.51 +      to()->check_mangled_unused_area(limit);
    1.52 +  }
    1.53 +
    1.54    // The call to initialize NULL's the next compaction space
    1.55 -  eden()->initialize(edenMR, true);
    1.56 +  eden()->initialize(edenMR,
    1.57 +                     SpaceDecorator::Clear,
    1.58 +                     SpaceDecorator::DontMangle);
    1.59    eden()->set_next_compaction_space(from());
    1.60 -    to()->initialize(toMR  , true);
    1.61 -  from()->initialize(fromMR, false);     // Note, not cleared!
    1.62 +    to()->initialize(toMR  ,
    1.63 +                     SpaceDecorator::Clear,
    1.64 +                     SpaceDecorator::DontMangle);
    1.65 +  from()->initialize(fromMR,
    1.66 +                     SpaceDecorator::DontClear,
    1.67 +                     SpaceDecorator::DontMangle);
    1.68  
    1.69    assert(from()->top() == old_from_top, "from top changed!");
    1.70  

mercurial