Mercurial > hg > jdk9-shenandoah > hotspot
changeset 8737:8c46f08ec891
8073463: G1 does not mangle freed heap regions
Reviewed-by: mgerdin, jwilhelm
author | david |
---|---|
date | Thu, 12 Mar 2015 14:09:36 +0100 |
parents | 42c9c92d320a |
children | 5f646eac768e |
files | src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp src/share/vm/gc_implementation/g1/heapRegion.cpp src/share/vm/gc_implementation/g1/heapRegion.hpp src/share/vm/memory/space.cpp src/share/vm/memory/space.hpp |
diffstat | 5 files changed, 21 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Thu Mar 12 10:11:20 2015 +0100 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Thu Mar 12 14:09:36 2015 +0100 @@ -396,6 +396,10 @@ // Resizing support void set_end(HeapWord* value); // override + // Never mangle CompactibleFreeListSpace + void mangle_unused_area() {} + void mangle_unused_area_complete() {} + // Mutual exclusion support Mutex* freelistLock() const { return &_freelistLock; }
--- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Mar 12 10:11:20 2015 +0100 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Mar 12 14:09:36 2015 +0100 @@ -934,6 +934,16 @@ _offsets.resize(new_end - bottom()); } +#ifndef PRODUCT +void G1OffsetTableContigSpace::mangle_unused_area() { + mangle_unused_area_complete(); +} + +void G1OffsetTableContigSpace::mangle_unused_area_complete() { + SpaceMangler::mangle_region(MemRegion(top(), end())); +} +#endif + void G1OffsetTableContigSpace::print() const { print_short(); gclog_or_tty->print_cr(" [" INTPTR_FORMAT ", " INTPTR_FORMAT ", "
--- a/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Mar 12 10:11:20 2015 +0100 +++ b/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Mar 12 14:09:36 2015 +0100 @@ -155,6 +155,9 @@ void set_bottom(HeapWord* value); void set_end(HeapWord* value); + void mangle_unused_area() PRODUCT_RETURN; + void mangle_unused_area_complete() PRODUCT_RETURN; + HeapWord* scan_top() const; void record_timestamp(); void reset_gc_time_stamp() { _gc_time_stamp = 0; }
--- a/src/share/vm/memory/space.cpp Thu Mar 12 10:11:20 2015 +0100 +++ b/src/share/vm/memory/space.cpp Thu Mar 12 14:09:36 2015 +0100 @@ -353,15 +353,6 @@ void ContiguousSpace::mangle_unused_area_complete() { mangler()->mangle_unused_area_complete(); } -void ContiguousSpace::mangle_region(MemRegion mr) { - // Although this method uses SpaceMangler::mangle_region() which - // is not specific to a space, the when the ContiguousSpace version - // is called, it is always with regard to a space and this - // bounds checking is appropriate. - MemRegion space_mr(bottom(), end()); - assert(space_mr.contains(mr), "Mangling outside space"); - SpaceMangler::mangle_region(mr); -} #endif // NOT_PRODUCT void CompactibleSpace::initialize(MemRegion mr,
--- a/src/share/vm/memory/space.hpp Thu Mar 12 10:11:20 2015 +0100 +++ b/src/share/vm/memory/space.hpp Thu Mar 12 14:09:36 2015 +0100 @@ -128,11 +128,10 @@ // For detecting GC bugs. Should only be called at GC boundaries, since // some unused space may be used as scratch space during GC's. - // Default implementation does nothing. We also call this when expanding - // a space to satisfy an allocation request. See bug #4668531 - virtual void mangle_unused_area() {} - virtual void mangle_unused_area_complete() {} - virtual void mangle_region(MemRegion mr) {} + // We also call this when expanding a space to satisfy an allocation + // request. See bug #4668531 + virtual void mangle_unused_area() = 0; + virtual void mangle_unused_area_complete() = 0; // Testers bool is_empty() const { return used() == 0; } @@ -559,8 +558,6 @@ void mangle_unused_area() PRODUCT_RETURN; // Mangle [top, end) void mangle_unused_area_complete() PRODUCT_RETURN; - // Mangle the given MemRegion. - void mangle_region(MemRegion mr) PRODUCT_RETURN; // Do some sparse checking on the area that should have been mangled. void check_mangled_unused_area(HeapWord* limit) PRODUCT_RETURN;