src/share/vm/gc_implementation/g1/g1OopClosures.hpp

changeset 6992
2c6ef90f030a
parent 6939
cd43876f692e
child 7535
7ae4e26cb1e0
child 7651
c132be0fb74d
child 7971
b554c7fa9478
     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;

mercurial