< prev index next >

src/hotspot/share/gc/serial/markSweep.hpp

Print this page




  39 class DataLayout;
  40 class SerialOldTracer;
  41 class STWGCTimer;
  42 
  43 // MarkSweep takes care of global mark-compact garbage collection for a
  44 // GenCollectedHeap using a four-phase pointer forwarding algorithm.  All
  45 // generations are assumed to support marking; those that can also support
  46 // compaction.
  47 //
  48 // Class unloading will only occur when a full gc is invoked.
  49 
  50 // declared at end
  51 class PreservedMark;
  52 class MarkAndPushClosure;
  53 class AdjustPointerClosure;
  54 
  55 class MarkSweep : AllStatic {
  56   //
  57   // Inline closure decls
  58   //
  59   class FollowRootClosure: public OopsInGenClosure {
  60    public:
  61     virtual void do_oop(oop* p);
  62     virtual void do_oop(narrowOop* p);
  63   };
  64 
  65   class FollowStackClosure: public VoidClosure {
  66    public:
  67     virtual void do_void();
  68   };
  69 
  70   // Used for java/lang/ref handling
  71   class IsAliveClosure: public BoolObjectClosure {
  72    public:
  73     virtual bool do_object_b(oop p);
  74   };
  75 
  76   class KeepAliveClosure: public OopClosure {
  77    protected:
  78     template <class T> void do_oop_work(T* p);
  79    public:


 153   template <class T> static inline void adjust_pointer(T* p);
 154 
 155   // Check mark and maybe push on marking stack
 156   template <class T> static void mark_and_push(T* p);
 157 
 158  private:
 159   // Call backs for marking
 160   static void mark_object(oop obj);
 161   // Mark pointer and follow contents.  Empty marking stack afterwards.
 162   template <class T> static inline void follow_root(T* p);
 163 
 164   static inline void push_objarray(oop obj, size_t index);
 165 
 166   static void follow_object(oop obj);
 167 
 168   static void follow_array(objArrayOop array);
 169 
 170   static void follow_array_chunk(objArrayOop array, int index);
 171 };
 172 
 173 class MarkAndPushClosure: public ExtendedOopClosure {
 174 public:
 175   template <typename T> void do_oop_nv(T* p);
 176   virtual void do_oop(oop* p);
 177   virtual void do_oop(narrowOop* p);
 178 
 179   virtual bool do_metadata();
 180   bool do_metadata_nv();
 181 
 182   virtual void do_klass(Klass* k);
 183   void do_klass_nv(Klass* k);
 184 
 185   virtual void do_cld(ClassLoaderData* cld);
 186   void do_cld_nv(ClassLoaderData* cld);
 187 
 188   void set_ref_discoverer(ReferenceDiscoverer* rd) {
 189     set_ref_discoverer_internal(rd);
 190   }
 191 };
 192 
 193 class AdjustPointerClosure: public OopsInGenClosure {
 194  public:
 195   template <typename T> void do_oop_nv(T* p);
 196   virtual void do_oop(oop* p);
 197   virtual void do_oop(narrowOop* p);
 198   virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; }
 199 
 200   // This closure provides its own oop verification code.
 201   debug_only(virtual bool should_verify_oops() { return false; })
 202 };
 203 
 204 class PreservedMark {
 205 private:
 206   oop _obj;
 207   markOop _mark;
 208 
 209 public:
 210   void init(oop obj, markOop mark) {
 211     _obj = obj;
 212     _mark = mark;
 213   }
 214 
 215   void adjust_pointer();


  39 class DataLayout;
  40 class SerialOldTracer;
  41 class STWGCTimer;
  42 
  43 // MarkSweep takes care of global mark-compact garbage collection for a
  44 // GenCollectedHeap using a four-phase pointer forwarding algorithm.  All
  45 // generations are assumed to support marking; those that can also support
  46 // compaction.
  47 //
  48 // Class unloading will only occur when a full gc is invoked.
  49 
  50 // declared at end
  51 class PreservedMark;
  52 class MarkAndPushClosure;
  53 class AdjustPointerClosure;
  54 
  55 class MarkSweep : AllStatic {
  56   //
  57   // Inline closure decls
  58   //
  59   class FollowRootClosure: public BasicOopsInGenClosure {
  60    public:
  61     virtual void do_oop(oop* p);
  62     virtual void do_oop(narrowOop* p);
  63   };
  64 
  65   class FollowStackClosure: public VoidClosure {
  66    public:
  67     virtual void do_void();
  68   };
  69 
  70   // Used for java/lang/ref handling
  71   class IsAliveClosure: public BoolObjectClosure {
  72    public:
  73     virtual bool do_object_b(oop p);
  74   };
  75 
  76   class KeepAliveClosure: public OopClosure {
  77    protected:
  78     template <class T> void do_oop_work(T* p);
  79    public:


 153   template <class T> static inline void adjust_pointer(T* p);
 154 
 155   // Check mark and maybe push on marking stack
 156   template <class T> static void mark_and_push(T* p);
 157 
 158  private:
 159   // Call backs for marking
 160   static void mark_object(oop obj);
 161   // Mark pointer and follow contents.  Empty marking stack afterwards.
 162   template <class T> static inline void follow_root(T* p);
 163 
 164   static inline void push_objarray(oop obj, size_t index);
 165 
 166   static void follow_object(oop obj);
 167 
 168   static void follow_array(objArrayOop array);
 169 
 170   static void follow_array_chunk(objArrayOop array, int index);
 171 };
 172 
 173 class MarkAndPushClosure: public OopIterateClosure {
 174 public:
 175   template <typename T> void do_oop_work(T* p);
 176   virtual void do_oop(oop* p);
 177   virtual void do_oop(narrowOop* p);
 178 
 179   virtual bool do_metadata() { return true; }


 180   virtual void do_klass(Klass* k);


 181   virtual void do_cld(ClassLoaderData* cld);

 182 
 183   void set_ref_discoverer(ReferenceDiscoverer* rd) {
 184     set_ref_discoverer_internal(rd);
 185   }
 186 };
 187 
 188 class AdjustPointerClosure: public BasicOopsInGenClosure {
 189  public:
 190   template <typename T> void do_oop_work(T* p);
 191   virtual void do_oop(oop* p);
 192   virtual void do_oop(narrowOop* p);
 193   virtual ReferenceIterationMode reference_iteration_mode() { return DO_FIELDS; }
 194 
 195   // This closure provides its own oop verification code.
 196   debug_only(virtual bool should_verify_oops() { return false; })
 197 };
 198 
 199 class PreservedMark {
 200 private:
 201   oop _obj;
 202   markOop _mark;
 203 
 204 public:
 205   void init(oop obj, markOop mark) {
 206     _obj = obj;
 207     _mark = mark;
 208   }
 209 
 210   void adjust_pointer();
< prev index next >