hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
changeset 4902 991aaddb5165
parent 3262 30d1c247fc25
child 5346 be3f9bf8c3a6
equal deleted inserted replaced
4901:304ce755c6ee 4902:991aaddb5165
   185   // Clear entries for the current region in any rem sets named in
   185   // Clear entries for the current region in any rem sets named in
   186   // the _outgoing_region_map.
   186   // the _outgoing_region_map.
   187   void clear_outgoing_entries();
   187   void clear_outgoing_entries();
   188 
   188 
   189   enum ParIterState { Unclaimed, Claimed, Complete };
   189   enum ParIterState { Unclaimed, Claimed, Complete };
   190   ParIterState _iter_state;
   190   volatile ParIterState _iter_state;
       
   191   volatile jlong _iter_claimed;
   191 
   192 
   192   // Unused unless G1RecordHRRSOops is true.
   193   // Unused unless G1RecordHRRSOops is true.
   193 
   194 
   194   static const int MaxRecorded = 1000000;
   195   static const int MaxRecorded = 1000000;
   195   static OopOrNarrowOopStar* _recorded_oops;
   196   static OopOrNarrowOopStar* _recorded_oops;
   207 public:
   208 public:
   208   HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
   209   HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
   209                    HeapRegion* hr);
   210                    HeapRegion* hr);
   210 
   211 
   211   static int num_par_rem_sets();
   212   static int num_par_rem_sets();
       
   213   static void setup_remset_size();
   212 
   214 
   213   HeapRegion* hr() const {
   215   HeapRegion* hr() const {
   214     return _other_regions.hr();
   216     return _other_regions.hr();
   215   }
   217   }
   216 
   218 
   270   // Sets the iteration state to "complete".
   272   // Sets the iteration state to "complete".
   271   void set_iter_complete();
   273   void set_iter_complete();
   272   // Returns "true" iff the region's iteration is complete.
   274   // Returns "true" iff the region's iteration is complete.
   273   bool iter_is_complete();
   275   bool iter_is_complete();
   274 
   276 
       
   277   // Support for claiming blocks of cards during iteration
       
   278   void set_iter_claimed(size_t x) { _iter_claimed = (jlong)x; }
       
   279   size_t iter_claimed() const { return (size_t)_iter_claimed; }
       
   280   // Claim the next block of cards
       
   281   size_t iter_claimed_next(size_t step) {
       
   282     size_t current, next;
       
   283     do {
       
   284       current = iter_claimed();
       
   285       next = current + step;
       
   286     } while (Atomic::cmpxchg((jlong)next, &_iter_claimed, (jlong)current) != (jlong)current);
       
   287     return current;
       
   288   }
       
   289 
   275   // Initialize the given iterator to iterate over this rem set.
   290   // Initialize the given iterator to iterate over this rem set.
   276   void init_iterator(HeapRegionRemSetIterator* iter) const;
   291   void init_iterator(HeapRegionRemSetIterator* iter) const;
   277 
   292 
   278 #if 0
   293 #if 0
   279   // Apply the "do_card" method to the start address of every card in the
   294   // Apply the "do_card" method to the start address of every card in the