4674 obj->is_typeArray()
4675 );
4676 return false;
4677 }
4678
4679 guarantee(obj->is_typeArray(),
4680 "Only eagerly reclaiming type arrays is supported, but the object "
4681 PTR_FORMAT " is not.", p2i(r->bottom()));
4682
4683 log_debug(gc, humongous)("Dead humongous region %u object size " SIZE_FORMAT " start " PTR_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
4684 region_idx,
4685 (size_t)obj->size() * HeapWordSize,
4686 p2i(r->bottom()),
4687 r->rem_set()->occupied(),
4688 r->rem_set()->strong_code_roots_list_length(),
4689 next_bitmap->is_marked(r->bottom()),
4690 g1h->is_humongous_reclaim_candidate(region_idx),
4691 obj->is_typeArray()
4692 );
4693
4694 g1h->concurrent_mark()->humongous_object_eagerly_reclaimed(r);
4695 _humongous_objects_reclaimed++;
4696 do {
4697 HeapRegion* next = g1h->next_region_in_humongous(r);
4698 _freed_bytes += r->used();
4699 r->set_containing_set(NULL);
4700 _humongous_regions_reclaimed++;
4701 g1h->free_humongous_region(r, _free_region_list);
4702 r = next;
4703 } while (r != NULL);
4704
4705 return false;
4706 }
4707
4708 uint humongous_objects_reclaimed() {
4709 return _humongous_objects_reclaimed;
4710 }
4711
4712 uint humongous_regions_reclaimed() {
4713 return _humongous_regions_reclaimed;
4714 }
|
4674 obj->is_typeArray()
4675 );
4676 return false;
4677 }
4678
4679 guarantee(obj->is_typeArray(),
4680 "Only eagerly reclaiming type arrays is supported, but the object "
4681 PTR_FORMAT " is not.", p2i(r->bottom()));
4682
4683 log_debug(gc, humongous)("Dead humongous region %u object size " SIZE_FORMAT " start " PTR_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d",
4684 region_idx,
4685 (size_t)obj->size() * HeapWordSize,
4686 p2i(r->bottom()),
4687 r->rem_set()->occupied(),
4688 r->rem_set()->strong_code_roots_list_length(),
4689 next_bitmap->is_marked(r->bottom()),
4690 g1h->is_humongous_reclaim_candidate(region_idx),
4691 obj->is_typeArray()
4692 );
4693
4694 G1ConcurrentMark* const cm = g1h->concurrent_mark();
4695 cm->humongous_object_eagerly_reclaimed(r);
4696 assert(!cm->is_marked_in_prev_bitmap(obj) && !cm->is_marked_in_next_bitmap(obj),
4697 "Eagerly reclaimed humongous region %u should not be marked at all but is in prev %s next %s",
4698 region_idx,
4699 BOOL_TO_STR(cm->is_marked_in_prev_bitmap(obj)),
4700 BOOL_TO_STR(cm->is_marked_in_next_bitmap(obj)));
4701 _humongous_objects_reclaimed++;
4702 do {
4703 HeapRegion* next = g1h->next_region_in_humongous(r);
4704 _freed_bytes += r->used();
4705 r->set_containing_set(NULL);
4706 _humongous_regions_reclaimed++;
4707 g1h->free_humongous_region(r, _free_region_list);
4708 r = next;
4709 } while (r != NULL);
4710
4711 return false;
4712 }
4713
4714 uint humongous_objects_reclaimed() {
4715 return _humongous_objects_reclaimed;
4716 }
4717
4718 uint humongous_regions_reclaimed() {
4719 return _humongous_regions_reclaimed;
4720 }
|