src/share/vm/gc_implementation/shared/mutableSpace.cpp

changeset 698
12eea04c8b06
parent 625
d1635bf93939
child 704
850fdf70db2b
     1.1 --- a/src/share/vm/gc_implementation/shared/mutableSpace.cpp	Fri Jun 27 19:12:11 2008 -0700
     1.2 +++ b/src/share/vm/gc_implementation/shared/mutableSpace.cpp	Wed Jul 09 15:08:55 2008 -0700
     1.3 @@ -25,7 +25,17 @@
     1.4  # include "incls/_precompiled.incl"
     1.5  # include "incls/_mutableSpace.cpp.incl"
     1.6  
     1.7 -void MutableSpace::initialize(MemRegion mr, bool clear_space) {
     1.8 +MutableSpace::MutableSpace(): ImmutableSpace(), _top(NULL) {
     1.9 +  _mangler = new MutableSpaceMangler(this);
    1.10 +}
    1.11 +
    1.12 +MutableSpace::~MutableSpace() {
    1.13 +  delete _mangler;
    1.14 +}
    1.15 +
    1.16 +void MutableSpace::initialize(MemRegion mr,
    1.17 +                              bool clear_space,
    1.18 +                              bool mangle_space) {
    1.19    HeapWord* bottom = mr.start();
    1.20    HeapWord* end    = mr.end();
    1.21  
    1.22 @@ -34,14 +44,51 @@
    1.23    set_bottom(bottom);
    1.24    set_end(end);
    1.25  
    1.26 -  if (clear_space) clear();
    1.27 +  if (clear_space) {
    1.28 +    clear(mangle_space);
    1.29 +  }
    1.30  }
    1.31  
    1.32 -void MutableSpace::clear() {
    1.33 +void MutableSpace::clear(bool mangle_space) {
    1.34    set_top(bottom());
    1.35 -  if (ZapUnusedHeapArea) mangle_unused_area();
    1.36 +  if (ZapUnusedHeapArea && mangle_space) {
    1.37 +    mangle_unused_area();
    1.38 +  }
    1.39  }
    1.40  
    1.41 +#ifndef PRODUCT
    1.42 +void MutableSpace::check_mangled_unused_area(HeapWord* limit) {
    1.43 +  mangler()->check_mangled_unused_area(limit);
    1.44 +}
    1.45 +
    1.46 +void MutableSpace::check_mangled_unused_area_complete() {
    1.47 +  mangler()->check_mangled_unused_area_complete();
    1.48 +}
    1.49 +
    1.50 +// Mangle only the unused space that has not previously
    1.51 +// been mangled and that has not been allocated since being
    1.52 +// mangled.
    1.53 +void MutableSpace::mangle_unused_area() {
    1.54 +  mangler()->mangle_unused_area();
    1.55 +}
    1.56 +
    1.57 +void MutableSpace::mangle_unused_area_complete() {
    1.58 +  mangler()->mangle_unused_area_complete();
    1.59 +}
    1.60 +
    1.61 +void MutableSpace::mangle_region(MemRegion mr) {
    1.62 +  SpaceMangler::mangle_region(mr);
    1.63 +}
    1.64 +
    1.65 +void MutableSpace::set_top_for_allocations(HeapWord* v) {
    1.66 +  mangler()->set_top_for_allocations(v);
    1.67 +}
    1.68 +
    1.69 +void MutableSpace::set_top_for_allocations() {
    1.70 +  mangler()->set_top_for_allocations(top());
    1.71 +}
    1.72 +#endif
    1.73 +
    1.74  // This version requires locking. */
    1.75  HeapWord* MutableSpace::allocate(size_t size) {
    1.76    assert(Heap_lock->owned_by_self() ||

mercurial