diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp index ea421365614..123bd792126 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp @@ -76,6 +76,9 @@ public: } } + // Bitmap reset task is heavy-weight and benefits from much smaller tasks than the default. + size_t parallel_region_stride() override { return 8; } + bool is_thread_safe() override { return true; } }; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 5c4d10ca8a5..6d569e9b4ce 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -1962,7 +1962,7 @@ void ShenandoahHeap::parallel_heap_region_iterate(ShenandoahHeapRegionClosure* b assert(blk->is_thread_safe(), "Only thread-safe closures here"); const uint active_workers = workers()->active_workers(); const size_t n_regions = num_regions(); - size_t stride = ShenandoahParallelRegionStride; + size_t stride = blk->parallel_region_stride(); if (stride == 0 && active_workers > 1) { // Automatically derive the stride to balance the work between threads // evenly. Do not try to split work if below the reasonable threshold. diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp index cd388ee7cf3..65e3803627c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp @@ -113,6 +113,7 @@ public: class ShenandoahHeapRegionClosure : public StackObj { public: virtual void heap_region_do(ShenandoahHeapRegion* r) = 0; + virtual size_t parallel_region_stride() { return ShenandoahParallelRegionStride; } virtual bool is_thread_safe() { return false; } }; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp index 0daf268628c..3f3b57c9bb2 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegionClosures.hpp @@ -44,6 +44,10 @@ public: } } + size_t parallel_region_stride() override { + return _closure->parallel_region_stride(); + } + bool is_thread_safe() override { return _closure->is_thread_safe(); } @@ -64,6 +68,10 @@ public: } } + size_t parallel_region_stride() override { + return _closure->parallel_region_stride(); + } + bool is_thread_safe() override { return _closure->is_thread_safe(); }