< prev index next >

src/hotspot/share/memory/iterator.hpp

Print this page




  29 #include "memory/memRegion.hpp"
  30 #include "oops/oopsHierarchy.hpp"
  31 
  32 class CodeBlob;
  33 class nmethod;
  34 class ReferenceProcessor;
  35 class DataLayout;
  36 class KlassClosure;
  37 class ClassLoaderData;
  38 class Symbol;
  39 
  40 // The following classes are C++ `closures` for iterating over objects, roots and spaces
  41 
  42 class Closure : public StackObj { };
  43 
  44 // OopClosure is used for iterating through references to Java objects.
  45 class OopClosure : public Closure {
  46  public:
  47   virtual void do_oop(oop* o) = 0;
  48   virtual void do_oop(narrowOop* o) = 0;


  49 };
  50 
  51 // ExtendedOopClosure adds extra code to be run during oop iterations.
  52 // This is needed by the GC and is extracted to a separate type to not
  53 // pollute the OopClosure interface.
  54 class ExtendedOopClosure : public OopClosure {
  55  private:
  56   ReferenceProcessor* _ref_processor;
  57 
  58  protected:
  59   ExtendedOopClosure(ReferenceProcessor* rp) : _ref_processor(rp) { }
  60   ExtendedOopClosure() : _ref_processor(NULL) { }
  61   ~ExtendedOopClosure() { }
  62 
  63   void set_ref_processor_internal(ReferenceProcessor* rp) { _ref_processor = rp; }
  64 
  65  public:
  66   ReferenceProcessor* ref_processor() const { return _ref_processor; }
  67 
  68   // Iteration of InstanceRefKlasses differ depending on the closure,




  29 #include "memory/memRegion.hpp"
  30 #include "oops/oopsHierarchy.hpp"
  31 
  32 class CodeBlob;
  33 class nmethod;
  34 class ReferenceProcessor;
  35 class DataLayout;
  36 class KlassClosure;
  37 class ClassLoaderData;
  38 class Symbol;
  39 
  40 // The following classes are C++ `closures` for iterating over objects, roots and spaces
  41 
  42 class Closure : public StackObj { };
  43 
  44 // OopClosure is used for iterating through references to Java objects.
  45 class OopClosure : public Closure {
  46  public:
  47   virtual void do_oop(oop* o) = 0;
  48   virtual void do_oop(narrowOop* o) = 0;
  49   virtual void do_oop_no_buffering(oop* o) { do_oop(o); }
  50   virtual void do_oop_no_buffering(narrowOop* o) { do_oop(o); }
  51 };
  52 
  53 // ExtendedOopClosure adds extra code to be run during oop iterations.
  54 // This is needed by the GC and is extracted to a separate type to not
  55 // pollute the OopClosure interface.
  56 class ExtendedOopClosure : public OopClosure {
  57  private:
  58   ReferenceProcessor* _ref_processor;
  59 
  60  protected:
  61   ExtendedOopClosure(ReferenceProcessor* rp) : _ref_processor(rp) { }
  62   ExtendedOopClosure() : _ref_processor(NULL) { }
  63   ~ExtendedOopClosure() { }
  64 
  65   void set_ref_processor_internal(ReferenceProcessor* rp) { _ref_processor = rp; }
  66 
  67  public:
  68   ReferenceProcessor* ref_processor() const { return _ref_processor; }
  69 
  70   // Iteration of InstanceRefKlasses differ depending on the closure,


< prev index next >