@@ -268,44 +268,39 @@ class G1HeapRegionStatsClosure: public G1HeapRegionClosure {
268268 return false ;
269269 }
270270
271- void do_cset_groups () {
272- G1CollectedHeap* g1h = G1CollectedHeap::heap ();
273- G1CSetCandidateGroup* young_only_cset_group = g1h->young_regions_cset_group ();
274-
271+ void accumulate_stats_for_group (G1CSetCandidateGroup* group, G1PerRegionTypeRemSetCounters* gen_counter) {
275272 // If the group has only a single region, then stats were accumulated
276- // during region iteration.
277- if (young_only_cset_group->length () > 1 ) {
278- G1CardSet* young_only_card_set = young_only_cset_group->card_set ();
279- size_t rs_mem_sz = young_only_card_set->mem_size ();
280- size_t rs_unused_mem_sz = young_only_card_set->unused_mem_size ();
281- size_t occupied_cards = young_only_card_set->occupied ();
282-
283- _max_group_cardset_mem_sz = rs_mem_sz;
284- _max_cardset_mem_sz_group = young_only_cset_group;
285-
286- // Only update cardset details
287- _young.add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
273+ // during region iteration. Skip these.
274+ if (group->length () > 1 ) {
275+ G1CardSet* card_set = group->card_set ();
276+
277+ size_t rs_mem_sz = card_set->mem_size ();
278+ size_t rs_unused_mem_sz = card_set->unused_mem_size ();
279+ size_t occupied_cards = card_set->occupied ();
280+
281+ if (rs_mem_sz > _max_group_cardset_mem_sz) {
282+ _max_group_cardset_mem_sz = rs_mem_sz;
283+ _max_cardset_mem_sz_group = group;
284+ }
285+
286+ gen_counter->add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
288287 _all.add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
289288 }
289+ }
290290
291+ void do_cset_groups () {
292+ G1CollectedHeap* g1h = G1CollectedHeap::heap ();
291293
292- G1PerRegionTypeRemSetCounters* current = &_old;
293- for (G1CSetCandidateGroup* group : g1h->policy ()->candidates ()->from_marking_groups ()) {
294- if (group->length () > 1 ) {
295- G1CardSet* group_card_set = group->card_set ();
296- size_t rs_mem_sz = group_card_set->mem_size ();
297- size_t rs_unused_mem_sz = group_card_set->unused_mem_size ();
298- size_t occupied_cards = group_card_set->occupied ();
299-
300- if (rs_mem_sz > _max_group_cardset_mem_sz) {
301- _max_group_cardset_mem_sz = rs_mem_sz;
302- _max_cardset_mem_sz_group = group;
303- }
294+ accumulate_stats_for_group (g1h->young_regions_cset_group (), &_young);
304295
305- // Only update cardset details
306- _old.add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
307- _all.add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
308- }
296+ G1CollectionSetCandidates* candidates = g1h->policy ()->candidates ();
297+ for (G1CSetCandidateGroup* group : candidates->from_marking_groups ()) {
298+ accumulate_stats_for_group (group, &_old);
299+ }
300+ // Skip gathering statistics for retained regions. Just verify that they have
301+ // the expected amount of regions.
302+ for (G1CSetCandidateGroup* group : candidates->retained_groups ()) {
303+ assert (group->length () == 1 , " must be" );
309304 }
310305 }
311306
0 commit comments