< prev index next >

src/hotspot/share/gc/shared/cardTableRS.cpp

Print this page




  41 class HasAccumulatedModifiedOopsClosure : public CLDClosure {
  42   bool _found;
  43  public:
  44   HasAccumulatedModifiedOopsClosure() : _found(false) {}
  45   void do_cld(ClassLoaderData* cld) {
  46     if (_found) {
  47       return;
  48     }
  49 
  50     if (cld->has_accumulated_modified_oops()) {
  51       _found = true;
  52     }
  53   }
  54   bool found() {
  55     return _found;
  56   }
  57 };
  58 
  59 bool CLDRemSet::mod_union_is_clear() {
  60   HasAccumulatedModifiedOopsClosure closure;
  61   ClassLoaderDataGraph::cld_do(&closure);
  62 
  63   return !closure.found();
  64 }
  65 
  66 
  67 class ClearCLDModUnionClosure : public CLDClosure {
  68  public:
  69   void do_cld(ClassLoaderData* cld) {
  70     if (cld->has_accumulated_modified_oops()) {
  71       cld->clear_accumulated_modified_oops();
  72     }
  73   }
  74 };
  75 
  76 void CLDRemSet::clear_mod_union() {
  77   ClearCLDModUnionClosure closure;
  78   ClassLoaderDataGraph::cld_do(&closure);
  79 }
  80 
  81 
  82 jbyte CardTableRS::find_unused_youngergenP_card_value() {
  83   for (jbyte v = youngergenP1_card;
  84        v < cur_youngergen_and_prev_nonclean_card;
  85        v++) {
  86     bool seen = false;
  87     for (int g = 0; g < _regions_to_iterate; g++) {
  88       if (_last_cur_val_in_gen[g] == v) {
  89         seen = true;
  90         break;
  91       }
  92     }
  93     if (!seen) {
  94       return v;
  95     }
  96   }
  97   ShouldNotReachHere();
  98   return 0;




  41 class HasAccumulatedModifiedOopsClosure : public CLDClosure {
  42   bool _found;
  43  public:
  44   HasAccumulatedModifiedOopsClosure() : _found(false) {}
  45   void do_cld(ClassLoaderData* cld) {
  46     if (_found) {
  47       return;
  48     }
  49 
  50     if (cld->has_accumulated_modified_oops()) {
  51       _found = true;
  52     }
  53   }
  54   bool found() {
  55     return _found;
  56   }
  57 };
  58 
  59 bool CLDRemSet::mod_union_is_clear() {
  60   HasAccumulatedModifiedOopsClosure closure;
  61   ClassLoaderDataGraph::cld_oops_do(&closure);
  62 
  63   return !closure.found();
  64 }
  65 
  66 
  67 class ClearCLDModUnionClosure : public CLDClosure {
  68  public:
  69   void do_cld(ClassLoaderData* cld) {
  70     if (cld->has_accumulated_modified_oops()) {
  71       cld->clear_accumulated_modified_oops();
  72     }
  73   }
  74 };
  75 
  76 void CLDRemSet::clear_mod_union() {
  77   ClearCLDModUnionClosure closure;
  78   ClassLoaderDataGraph::cld_oops_do(&closure);
  79 }
  80 
  81 
  82 jbyte CardTableRS::find_unused_youngergenP_card_value() {
  83   for (jbyte v = youngergenP1_card;
  84        v < cur_youngergen_and_prev_nonclean_card;
  85        v++) {
  86     bool seen = false;
  87     for (int g = 0; g < _regions_to_iterate; g++) {
  88       if (_last_cur_val_in_gen[g] == v) {
  89         seen = true;
  90         break;
  91       }
  92     }
  93     if (!seen) {
  94       return v;
  95     }
  96   }
  97   ShouldNotReachHere();
  98   return 0;


< prev index next >