--- old/src/share/vm/gc/g1/heapRegion.hpp 2016-03-08 15:19:56.027393161 -0500 +++ new/src/share/vm/gc/g1/heapRegion.hpp 2016-03-08 15:19:55.311352729 -0500 @@ -761,14 +761,29 @@ friend class HeapRegionManager; friend class G1CollectedHeap; + public: + HeapRegionClosure() {} + + // Typically called on each region until it returns true. + virtual void doHeapRegion(HeapRegion* r) = 0; +}; + +// AbortableHeapRegionClosure is used for iterating over regions. +// Terminates the iteration when the "doHeapRegion" method returns "true". +class AbortableHeapRegionClosure : public StackObj { + friend class HeapRegionManager; + friend class G1CollectedHeap; + bool _complete; void incomplete() { _complete = false; } public: - HeapRegionClosure(): _complete(true) {} + AbortableHeapRegionClosure(): _complete(true) {} + + //void doHeapRegion(HeapRegion* r) {} // Typically called on each region until it returns true. - virtual bool doHeapRegion(HeapRegion* r) = 0; + virtual bool doHeapRegionAbortable(HeapRegion* r) = 0; // True after iteration if the closure was applied to all heap regions // and returned "false" in all cases.