< prev index next >

src/hotspot/share/gc/g1/g1SATBCardTableModRefBS.hpp

Print this page
rev 48471 : [mq]: RFE_Access_constantPoolCache_new_decorator


  37 // This barrier is specialized to use a logging barrier to support
  38 // snapshot-at-the-beginning marking.
  39 
  40 class G1SATBCardTableModRefBS: public CardTableModRefBS {
  41   friend class VMStructs;
  42 protected:
  43   enum G1CardValues {
  44     g1_young_gen = CT_MR_BS_last_reserved << 1
  45   };
  46 
  47   G1SATBCardTableModRefBS(MemRegion whole_heap, const BarrierSet::FakeRtti& fake_rtti);
  48   ~G1SATBCardTableModRefBS() { }
  49 
  50 public:
  51   static int g1_young_card_val()   { return g1_young_gen; }
  52 
  53   // Add "pre_val" to a set of objects that may have been disconnected from the
  54   // pre-marking object graph.
  55   static void enqueue(oop pre_val);
  56 
  57   static void enqueue_if_weak(DecoratorSet decorators, oop value);
  58 
  59   template <class T> void write_ref_array_pre_work(T* dst, int count);
  60   virtual void write_ref_array_pre(oop* dst, int count, bool dest_uninitialized);
  61   virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized);
  62 
  63   template <DecoratorSet decorators, typename T>
  64   void write_ref_field_pre(T* field);
  65 
  66 /*
  67    Claimed and deferred bits are used together in G1 during the evacuation
  68    pause. These bits can have the following state transitions:
  69    1. The claimed bit can be put over any other card state. Except that
  70       the "dirty -> dirty and claimed" transition is checked for in
  71       G1 code and is not used.
  72    2. Deferred bit can be set only if the previous state of the card
  73       was either clean or claimed. mark_card_deferred() is wait-free.
  74       We do not care if the operation is be successful because if
  75       it does not it will only result in duplicate entry in the update
  76       buffer because of the "cache-miss". So it's not worth spinning.
  77  */




  37 // This barrier is specialized to use a logging barrier to support
  38 // snapshot-at-the-beginning marking.
  39 
  40 class G1SATBCardTableModRefBS: public CardTableModRefBS {
  41   friend class VMStructs;
  42 protected:
  43   enum G1CardValues {
  44     g1_young_gen = CT_MR_BS_last_reserved << 1
  45   };
  46 
  47   G1SATBCardTableModRefBS(MemRegion whole_heap, const BarrierSet::FakeRtti& fake_rtti);
  48   ~G1SATBCardTableModRefBS() { }
  49 
  50 public:
  51   static int g1_young_card_val()   { return g1_young_gen; }
  52 
  53   // Add "pre_val" to a set of objects that may have been disconnected from the
  54   // pre-marking object graph.
  55   static void enqueue(oop pre_val);
  56 
  57   static void enqueue_if_weak_or_archive(DecoratorSet decorators, oop value);
  58 
  59   template <class T> void write_ref_array_pre_work(T* dst, int count);
  60   virtual void write_ref_array_pre(oop* dst, int count, bool dest_uninitialized);
  61   virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized);
  62 
  63   template <DecoratorSet decorators, typename T>
  64   void write_ref_field_pre(T* field);
  65 
  66 /*
  67    Claimed and deferred bits are used together in G1 during the evacuation
  68    pause. These bits can have the following state transitions:
  69    1. The claimed bit can be put over any other card state. Except that
  70       the "dirty -> dirty and claimed" transition is checked for in
  71       G1 code and is not used.
  72    2. Deferred bit can be set only if the previous state of the card
  73       was either clean or claimed. mark_card_deferred() is wait-free.
  74       We do not care if the operation is be successful because if
  75       it does not it will only result in duplicate entry in the update
  76       buffer because of the "cache-miss". So it's not worth spinning.
  77  */


< prev index next >