< prev index next >
src/hotspot/share/gc/shared/genOopClosures.hpp
Print this page
*** 79,106 ****
HeapWord* gen_boundary() { return _gen_boundary; }
};
! // Super class for scan closures. It contains code to dirty scanned Klasses.
! class OopsInKlassOrGenClosure: public OopsInGenClosure {
! Klass* _scanned_klass;
public:
! OopsInKlassOrGenClosure(Generation* g) : OopsInGenClosure(g), _scanned_klass(NULL) {}
! void set_scanned_klass(Klass* k) {
! assert(k == NULL || _scanned_klass == NULL, "Must be");
! _scanned_klass = k;
}
! bool is_scanning_a_klass() { return _scanned_klass != NULL; }
! void do_klass_barrier();
};
// Closure for scanning DefNewGeneration.
//
// This closure will perform barrier store calls for ALL
// pointers in scanned oops.
! class ScanClosure: public OopsInKlassOrGenClosure {
protected:
DefNewGeneration* _g;
HeapWord* _boundary;
bool _gc_barrier;
template <class T> inline void do_oop_work(T* p);
--- 79,107 ----
HeapWord* gen_boundary() { return _gen_boundary; }
};
! // Super class for scan closures. It contains code to dirty scanned class loader data.
! class OopsInClassLoaderDataOrGenClosure: public OopsInGenClosure {
! ClassLoaderData* _scanned_cld;
public:
! OopsInClassLoaderDataOrGenClosure(Generation* g) : OopsInGenClosure(g), _scanned_cld(NULL) {}
! void set_scanned_cld(ClassLoaderData* cld) {
! assert(cld == NULL || _scanned_cld == NULL, "Must be");
! _scanned_cld = cld;
}
! bool is_scanning_a_cld() { return _scanned_cld != NULL; }
! void do_cld_barrier();
};
+
// Closure for scanning DefNewGeneration.
//
// This closure will perform barrier store calls for ALL
// pointers in scanned oops.
! class ScanClosure: public OopsInClassLoaderDataOrGenClosure {
protected:
DefNewGeneration* _g;
HeapWord* _boundary;
bool _gc_barrier;
template <class T> inline void do_oop_work(T* p);
*** 115,125 ****
// Closure for scanning DefNewGeneration.
//
// This closure only performs barrier store calls on
// pointers into the DefNewGeneration. This is less
// precise, but faster, than a ScanClosure
! class FastScanClosure: public OopsInKlassOrGenClosure {
protected:
DefNewGeneration* _g;
HeapWord* _boundary;
bool _gc_barrier;
template <class T> inline void do_oop_work(T* p);
--- 116,126 ----
// Closure for scanning DefNewGeneration.
//
// This closure only performs barrier store calls on
// pointers into the DefNewGeneration. This is less
// precise, but faster, than a ScanClosure
! class FastScanClosure: public OopsInClassLoaderDataOrGenClosure {
protected:
DefNewGeneration* _g;
HeapWord* _boundary;
bool _gc_barrier;
template <class T> inline void do_oop_work(T* p);
*** 129,146 ****
virtual void do_oop(narrowOop* p);
inline void do_oop_nv(oop* p);
inline void do_oop_nv(narrowOop* p);
};
! class KlassScanClosure: public KlassClosure {
! OopsInKlassOrGenClosure* _scavenge_closure;
// true if the the modified oops state should be saved.
bool _accumulate_modified_oops;
public:
! KlassScanClosure(OopsInKlassOrGenClosure* scavenge_closure,
! KlassRemSet* klass_rem_set_policy);
! void do_klass(Klass* k);
};
class FilteringClosure: public ExtendedOopClosure {
private:
HeapWord* _boundary;
--- 130,148 ----
virtual void do_oop(narrowOop* p);
inline void do_oop_nv(oop* p);
inline void do_oop_nv(narrowOop* p);
};
! class CLDScanClosure: public CLDClosure {
! OopsInClassLoaderDataOrGenClosure* _scavenge_closure;
// true if the the modified oops state should be saved.
bool _accumulate_modified_oops;
public:
! CLDScanClosure(OopsInClassLoaderDataOrGenClosure* scavenge_closure,
! bool accumulate_modified_oops) :
! _scavenge_closure(scavenge_closure), _accumulate_modified_oops(accumulate_modified_oops) {}
! void do_cld(ClassLoaderData* k);
};
class FilteringClosure: public ExtendedOopClosure {
private:
HeapWord* _boundary;
< prev index next >