1.1 --- a/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Tue Jul 01 09:03:55 2014 +0200 1.2 +++ b/src/share/vm/gc_implementation/g1/g1OopClosures.hpp Mon Jul 07 10:12:40 2014 +0200 1.3 @@ -25,6 +25,8 @@ 1.4 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP 1.5 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1OOPCLOSURES_HPP 1.6 1.7 +#include "memory/iterator.hpp" 1.8 + 1.9 class HeapRegion; 1.10 class G1CollectedHeap; 1.11 class G1RemSet; 1.12 @@ -106,7 +108,7 @@ 1.13 template <class T> void do_klass_barrier(T* p, oop new_obj); 1.14 }; 1.15 1.16 -template <G1Barrier barrier, bool do_mark_object> 1.17 +template <G1Barrier barrier, G1Mark do_mark_object> 1.18 class G1ParCopyClosure : public G1ParCopyHelper { 1.19 private: 1.20 template <class T> void do_oop_work(T* p); 1.21 @@ -121,19 +123,19 @@ 1.22 template <class T> void do_oop_nv(T* p) { do_oop_work(p); } 1.23 virtual void do_oop(oop* p) { do_oop_nv(p); } 1.24 virtual void do_oop(narrowOop* p) { do_oop_nv(p); } 1.25 + 1.26 + G1CollectedHeap* g1() { return _g1; }; 1.27 + G1ParScanThreadState* pss() { return _par_scan_state; } 1.28 + ReferenceProcessor* rp() { return _ref_processor; }; 1.29 }; 1.30 1.31 -typedef G1ParCopyClosure<G1BarrierNone, false> G1ParScanExtRootClosure; 1.32 -typedef G1ParCopyClosure<G1BarrierKlass, false> G1ParScanMetadataClosure; 1.33 - 1.34 - 1.35 -typedef G1ParCopyClosure<G1BarrierNone, true> G1ParScanAndMarkExtRootClosure; 1.36 -typedef G1ParCopyClosure<G1BarrierKlass, true> G1ParScanAndMarkMetadataClosure; 1.37 - 1.38 +typedef G1ParCopyClosure<G1BarrierNone, G1MarkNone> G1ParScanExtRootClosure; 1.39 +typedef G1ParCopyClosure<G1BarrierNone, G1MarkFromRoot> G1ParScanAndMarkExtRootClosure; 1.40 +typedef G1ParCopyClosure<G1BarrierNone, G1MarkPromotedFromRoot> G1ParScanAndMarkWeakExtRootClosure; 1.41 // We use a separate closure to handle references during evacuation 1.42 // failure processing. 1.43 1.44 -typedef G1ParCopyClosure<G1BarrierEvac, false> G1ParScanHeapEvacFailureClosure; 1.45 +typedef G1ParCopyClosure<G1BarrierEvac, G1MarkNone> G1ParScanHeapEvacFailureClosure; 1.46 1.47 class FilterIntoCSClosure: public ExtendedOopClosure { 1.48 G1CollectedHeap* _g1; 1.49 @@ -164,10 +166,11 @@ 1.50 }; 1.51 1.52 // Closure for iterating over object fields during concurrent marking 1.53 -class G1CMOopClosure : public ExtendedOopClosure { 1.54 +class G1CMOopClosure : public MetadataAwareOopClosure { 1.55 +protected: 1.56 + ConcurrentMark* _cm; 1.57 private: 1.58 G1CollectedHeap* _g1h; 1.59 - ConcurrentMark* _cm; 1.60 CMTask* _task; 1.61 public: 1.62 G1CMOopClosure(G1CollectedHeap* g1h, ConcurrentMark* cm, CMTask* task); 1.63 @@ -177,7 +180,7 @@ 1.64 }; 1.65 1.66 // Closure to scan the root regions during concurrent marking 1.67 -class G1RootRegionScanClosure : public ExtendedOopClosure { 1.68 +class G1RootRegionScanClosure : public MetadataAwareOopClosure { 1.69 private: 1.70 G1CollectedHeap* _g1h; 1.71 ConcurrentMark* _cm;