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() ||