@@ -268,44 +268,39 @@ class G1HeapRegionStatsClosure: public G1HeapRegionClosure {
268
268
return false ;
269
269
}
270
270
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) {
275
272
// 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 );
288
287
_all.add (rs_unused_mem_sz, rs_mem_sz, occupied_cards, 0 , 0 , false );
289
288
}
289
+ }
290
290
291
+ void do_cset_groups () {
292
+ G1CollectedHeap* g1h = G1CollectedHeap::heap ();
291
293
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);
304
295
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" );
309
304
}
310
305
}
311
306
0 commit comments