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; |