< 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 >