Skip to content

Commit 86cec4e

Browse files
author
Ivan Walulya
committed
8343782: G1: Use one G1CardSet instance for multiple old gen regions
Reviewed-by: ayang, tschatzl
1 parent 006ed5c commit 86cec4e

32 files changed

+1071
-762
lines changed

src/hotspot/share/gc/g1/g1CardSet.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,15 @@ G1AddCardResult G1CardSet::add_card(uintptr_t card) {
779779
uint card_within_region;
780780
split_card(card, card_region, card_within_region);
781781

782+
#ifdef ASSERT
783+
{
784+
uint region_idx = card_region >> config()->log2_card_regions_per_heap_region();
785+
G1HeapRegion* r = G1CollectedHeap::heap()->region_at(region_idx);
786+
assert(!r->rem_set()->is_added_to_cset_group() ||
787+
r->rem_set()->cset_group()->card_set() != this, "Should not be sharing a cardset");
788+
}
789+
#endif
790+
782791
return add_card(card_region, card_within_region, true /* increment_total */);
783792
}
784793

src/hotspot/share/gc/g1/g1CollectedHeap.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,8 +1159,7 @@ G1CollectedHeap::G1CollectedHeap() :
11591159
_rem_set(nullptr),
11601160
_card_set_config(),
11611161
_card_set_freelist_pool(G1CardSetConfiguration::num_mem_object_types()),
1162-
_young_regions_cardset_mm(card_set_config(), card_set_freelist_pool()),
1163-
_young_regions_cardset(card_set_config(), &_young_regions_cardset_mm),
1162+
_young_regions_cset_group(card_set_config(), &_card_set_freelist_pool, 1u /* group_id */),
11641163
_cm(nullptr),
11651164
_cm_thread(nullptr),
11661165
_cr(nullptr),
@@ -2716,7 +2715,7 @@ bool G1CollectedHeap::is_old_gc_alloc_region(G1HeapRegion* hr) {
27162715
void G1CollectedHeap::set_region_short_lived_locked(G1HeapRegion* hr) {
27172716
_eden.add(hr);
27182717
_policy->set_region_eden(hr);
2719-
hr->install_group_cardset(young_regions_cardset());
2718+
young_regions_cset_group()->add(hr);
27202719
}
27212720

27222721
#ifdef ASSERT
@@ -2927,7 +2926,7 @@ G1HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size, G1HeapRegio
29272926
_survivor.add(new_alloc_region);
29282927
register_new_survivor_region_with_region_attr(new_alloc_region);
29292928
// Install the group cardset.
2930-
new_alloc_region->install_group_cardset(young_regions_cardset());
2929+
young_regions_cset_group()->add(new_alloc_region);
29312930
} else {
29322931
new_alloc_region->set_old();
29332932
}
@@ -3070,6 +3069,8 @@ void G1CollectedHeap::finish_codecache_marking_cycle() {
30703069
CodeCache::arm_all_nmethods();
30713070
}
30723071

3073-
void G1CollectedHeap::prepare_group_cardsets_for_scan () {
3074-
_young_regions_cardset.reset_table_scanner_for_groups();
3072+
void G1CollectedHeap::prepare_group_cardsets_for_scan() {
3073+
young_regions_cardset()->reset_table_scanner_for_groups();
3074+
3075+
collection_set()->prepare_groups_for_scan();
30753076
}

src/hotspot/share/gc/g1/g1CollectedHeap.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -781,15 +781,15 @@ class G1CollectedHeap : public CollectedHeap {
781781
G1MonotonicArenaFreePool _card_set_freelist_pool;
782782

783783
// Group cardsets
784-
G1CardSetMemoryManager _young_regions_cardset_mm;
785-
G1CardSet _young_regions_cardset;
784+
G1CSetCandidateGroup _young_regions_cset_group;
786785

787786
public:
788787
G1CardSetConfiguration* card_set_config() { return &_card_set_config; }
789788

790-
G1CardSet* young_regions_cardset() { return &_young_regions_cardset; };
789+
G1CSetCandidateGroup* young_regions_cset_group() { return &_young_regions_cset_group; }
790+
G1CardSet* young_regions_cardset() { return _young_regions_cset_group.card_set(); };
791791

792-
G1CardSetMemoryManager* young_regions_card_set_mm() { return &_young_regions_cardset_mm; }
792+
G1MonotonicArenaMemoryStats young_regions_card_set_memory_stats() { return _young_regions_cset_group.card_set_memory_stats(); }
793793

794794
void prepare_group_cardsets_for_scan();
795795

src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,6 @@ void G1CollectedHeap::register_region_with_region_attr(G1HeapRegion* r) {
225225
}
226226

227227
void G1CollectedHeap::register_old_region_with_region_attr(G1HeapRegion* r) {
228-
assert(!r->has_pinned_objects(), "must be");
229228
assert(r->rem_set()->is_complete(), "must be");
230229
_region_attr.set_in_old(r->hrm_index(), true);
231230
_rem_set->exclude_region_from_scan(r->hrm_index());

0 commit comments

Comments
 (0)