From c6eea8acf6eea7314a1615e5923ac7bf73e6da02 Mon Sep 17 00:00:00 2001 From: William Kemper Date: Thu, 30 Oct 2025 21:10:01 +0000 Subject: [PATCH] 8370667: GenShen: Only make assertions about region pinning for collected generation Reviewed-by: xpeng, ysr --- .../heuristics/shenandoahGenerationalHeuristics.cpp | 2 +- src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp | 12 +++++++++--- src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp | 3 ++- .../share/gc/shenandoah/shenandoahOldGeneration.cpp | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahGenerationalHeuristics.cpp b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahGenerationalHeuristics.cpp index a2cccec8423..cab6abc4e6f 100644 --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahGenerationalHeuristics.cpp +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahGenerationalHeuristics.cpp @@ -45,7 +45,7 @@ void ShenandoahGenerationalHeuristics::choose_collection_set(ShenandoahCollectio // Check all pinned regions have updated status before choosing the collection set. - heap->assert_pinned_region_status(); + heap->assert_pinned_region_status(_generation); // Step 1. Build up the region candidates we care about, rejecting losers and accepting winners right away. diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 344811449ab..befb6069409 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -2419,11 +2419,17 @@ void ShenandoahHeap::sync_pinned_region_status() { } #ifdef ASSERT -void ShenandoahHeap::assert_pinned_region_status() { +void ShenandoahHeap::assert_pinned_region_status() const { + assert_pinned_region_status(global_generation()); +} + +void ShenandoahHeap::assert_pinned_region_status(ShenandoahGeneration* generation) const { for (size_t i = 0; i < num_regions(); i++) { ShenandoahHeapRegion* r = get_region(i); - assert((r->is_pinned() && r->pin_count() > 0) || (!r->is_pinned() && r->pin_count() == 0), - "Region %zu pinning status is inconsistent", i); + if (generation->contains(r)) { + assert((r->is_pinned() && r->pin_count() > 0) || (!r->is_pinned() && r->pin_count() == 0), + "Region %zu pinning status is inconsistent", i); + } } } #endif diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp index eae975b9409..e44bbd55e92 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp @@ -669,7 +669,8 @@ public: void unpin_object(JavaThread* thread, oop obj) override; void sync_pinned_region_status(); - void assert_pinned_region_status() NOT_DEBUG_RETURN; + void assert_pinned_region_status() const NOT_DEBUG_RETURN; + void assert_pinned_region_status(ShenandoahGeneration* generation) const NOT_DEBUG_RETURN; // ---------- CDS archive support diff --git a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp index 095aa0079ae..edaec02876a 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahOldGeneration.cpp @@ -494,7 +494,7 @@ void ShenandoahOldGeneration::prepare_regions_and_collection_set(bool concurrent ShenandoahFinalMarkUpdateRegionStateClosure cl(complete_marking_context()); parallel_heap_region_iterate(&cl); - heap->assert_pinned_region_status(); + heap->assert_pinned_region_status(this); } {