From 63dbbed6069d29f075ab81dd2612297658111aab Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 12:42:22 -0800 Subject: [PATCH 01/13] arraycopy_work should be done unconditionally if the array is in an old region --- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index adeea8ebf9613..befe98cbfc90b 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -445,7 +445,8 @@ template void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { assert(_heap->is_concurrent_mark_in_progress(), "only during marking"); if (ShenandoahSATBBarrier) { - if (!_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { + if (_heap->heap_region_containing(dst)->is_old() || + !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { arraycopy_work(dst, count); } } From 1500475e74b8f7d306f43a963fe81bb439725af3 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 15:47:40 -0800 Subject: [PATCH 02/13] Add assert to check card table to sure card table is correct --- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index befe98cbfc90b..c36eb9764231b 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -447,6 +447,15 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (ShenandoahSATBBarrier) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { +#ifdef ASSERT + if (_heap->heap_region_containing(dst)->is_old()) { + ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); + T* end = dst + count; + for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { + assert(card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), "Card for array element in old generation should be dirty"); + } + } +#endif // ASSERT arraycopy_work(dst, count); } } From 6cb8275a2845dddb01da3256d2a0f1dbaa4925cb Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 16:17:03 -0800 Subject: [PATCH 03/13] Assert only when the obj been pointed to is in young --- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index c36eb9764231b..afaf0b1492c38 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -447,15 +447,22 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (ShenandoahSATBBarrier) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { + #ifdef ASSERT if (_heap->heap_region_containing(dst)->is_old()) { ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); T* end = dst + count; for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { - assert(card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), "Card for array element in old generation should be dirty"); + T o = RawAccess<>::oop_load(elem_ptr); + if (!CompressedOops::is_null(o)) { + oop obj = CompressedOops::decode_not_null(o); + assert(!_heap->is_in_young(obj) || card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), + "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); + } } } #endif // ASSERT + arraycopy_work(dst, count); } } From 44938dc7f9d9f29d8e3a61203e4306b2ea6552ec Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 16:18:37 -0800 Subject: [PATCH 04/13] Reorder the code --- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index afaf0b1492c38..0dca943994ab2 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -447,7 +447,7 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (ShenandoahSATBBarrier) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { - + arraycopy_work(dst, count); #ifdef ASSERT if (_heap->heap_region_containing(dst)->is_old()) { ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); @@ -462,8 +462,6 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { } } #endif // ASSERT - - arraycopy_work(dst, count); } } } From 5b951e6d39ae7be3fa3e9937e4c35f42785a59ea Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 17:12:40 -0800 Subject: [PATCH 05/13] uncomment the new added assert --- .../shenandoahBarrierSet.inline.hpp | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index 0dca943994ab2..e478ba76fc592 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -448,20 +448,22 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { arraycopy_work(dst, count); -#ifdef ASSERT - if (_heap->heap_region_containing(dst)->is_old()) { - ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); - T* end = dst + count; - for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { - T o = RawAccess<>::oop_load(elem_ptr); - if (!CompressedOops::is_null(o)) { - oop obj = CompressedOops::decode_not_null(o); - assert(!_heap->is_in_young(obj) || card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), - "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); - } - } - } -#endif // ASSERT +// The assert intended to add should be correct, the remembered set is not right due to bug, +// this block should be uncommented once the bug is located and fixed. +// #ifdef ASSERT +// if (_heap->heap_region_containing(dst)->is_old()) { +// ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); +// T* end = dst + count; +// for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { +// T o = RawAccess<>::oop_load(elem_ptr); +// if (!CompressedOops::is_null(o)) { +// oop obj = CompressedOops::decode_not_null(o); +// assert(!_heap->is_in_young(obj) || card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), +// "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); +// } +// } +// } +// #endif // ASSERT } } } From 85acca0c51f10825a965379d56275488999a8738 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Thu, 4 Dec 2025 23:17:51 -0800 Subject: [PATCH 06/13] Remove the asset code --- .../shenandoah/shenandoahBarrierSet.inline.hpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index e478ba76fc592..befe98cbfc90b 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -448,22 +448,6 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { arraycopy_work(dst, count); -// The assert intended to add should be correct, the remembered set is not right due to bug, -// this block should be uncommented once the bug is located and fixed. -// #ifdef ASSERT -// if (_heap->heap_region_containing(dst)->is_old()) { -// ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); -// T* end = dst + count; -// for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { -// T o = RawAccess<>::oop_load(elem_ptr); -// if (!CompressedOops::is_null(o)) { -// oop obj = CompressedOops::decode_not_null(o); -// assert(!_heap->is_in_young(obj) || card_scan->is_card_dirty(reinterpret_cast(elem_ptr)), -// "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); -// } -// } -// } -// #endif // ASSERT } } } From 53316bd36855302342cffd070c02bf50b500bc82 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Fri, 5 Dec 2025 08:22:10 -0800 Subject: [PATCH 07/13] Add asserts back, the elem_ptr must be dirty either in read or write table --- .../shenandoah/shenandoahBarrierSet.inline.hpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index befe98cbfc90b..55eab83520a63 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -40,6 +40,7 @@ #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" +#include "gc/shenandoah/shenandoahScanRemembered.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "memory/iterator.inline.hpp" #include "oops/oop.inline.hpp" @@ -448,6 +449,23 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { if (_heap->heap_region_containing(dst)->is_old() || !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { arraycopy_work(dst, count); +#ifdef ASSERT + if (_heap->heap_region_containing(dst)->is_old()) { + ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); + T* end = dst + count; + for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { + T o = RawAccess<>::oop_load(elem_ptr); + if (!CompressedOops::is_null(o)) { + HeapWord *elem_heap_word_ptr = reinterpret_cast(elem_ptr); + oop obj = CompressedOops::decode_not_null(o); + assert(!_heap->is_in_young(obj) || + card_scan->is_card_dirty(elem_heap_word_ptr) || + card_scan->is_write_card_dirty(elem_heap_word_ptr), + "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); + } + } + } +#endif // ASSERT } } } From 49ea3c93195f68e0da8015fa16fe956a10e4d42b Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Fri, 5 Dec 2025 10:16:31 -0800 Subject: [PATCH 08/13] Add include header shenandoahOldGeneration.hpp --- src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index 55eab83520a63..f0d7704de9f60 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -40,6 +40,7 @@ #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" +#include "gc/shenandoah/shenandoahOldGeneration.hpp" #include "gc/shenandoah/shenandoahScanRemembered.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "memory/iterator.inline.hpp" From c649cf2b4e2776aea7c497f0d18359887948d51c Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Sun, 7 Dec 2025 12:29:00 -0800 Subject: [PATCH 09/13] enqueue objects stored in old array at ShenandoahSATBBarrier when concurrent young marking is in progress --- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index f0d7704de9f60..f863a4c26d82d 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -447,8 +447,8 @@ template void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { assert(_heap->is_concurrent_mark_in_progress(), "only during marking"); if (ShenandoahSATBBarrier) { - if (_heap->heap_region_containing(dst)->is_old() || - !_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst))) { + if (!_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst)) || + (_heap->is_concurrent_young_mark_in_progress() && _heap->heap_region_containing(dst)->is_old())) { arraycopy_work(dst, count); #ifdef ASSERT if (_heap->heap_region_containing(dst)->is_old()) { From 225b999dfdc429f38d2738cbf6cdc0f40af3c226 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Mon, 8 Dec 2025 10:04:52 -0800 Subject: [PATCH 10/13] Also test is_generational --- src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index f863a4c26d82d..48e802fc24bac 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -448,7 +448,7 @@ void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { assert(_heap->is_concurrent_mark_in_progress(), "only during marking"); if (ShenandoahSATBBarrier) { if (!_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst)) || - (_heap->is_concurrent_young_mark_in_progress() && _heap->heap_region_containing(dst)->is_old())) { + (_heap->mode()->is_generational() && _heap->heap_region_containing(dst)->is_old() && _heap->is_concurrent_young_mark_in_progress())) { arraycopy_work(dst, count); #ifdef ASSERT if (_heap->heap_region_containing(dst)->is_old()) { From dda8ff62062e128e386b5d089f86eb1ace89eb1a Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Mon, 8 Dec 2025 14:29:00 -0800 Subject: [PATCH 11/13] Remove card assert, pass IS_GENERATIONAL as template parameter --- .../gc/shenandoah/shenandoahBarrierSet.hpp | 4 +-- .../shenandoahBarrierSet.inline.hpp | 27 +++++-------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp index 2b5bc766a462a..7db478a781a72 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.hpp @@ -128,8 +128,8 @@ class ShenandoahBarrierSet: public BarrierSet { void write_ref_array(HeapWord* start, size_t count); private: - template - inline void arraycopy_marking(T* dst, size_t count); + template + void arraycopy_marking(T* dst, size_t count); template inline void arraycopy_evacuation(T* src, size_t count); template diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index 48e802fc24bac..d1b71af3de18d 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -431,7 +431,11 @@ void ShenandoahBarrierSet::arraycopy_barrier(T* src, T* dst, size_t count) { // If marking old or young, we must evaluate the SATB barrier. This will be the only // action if we are not marking old. If we are marking old, we must still evaluate the // load reference barrier for a young collection. - arraycopy_marking(dst, count); + if (_heap->mode()->is_generational()) { + arraycopy_marking(dst, count); + } else { + arraycopy_marking(dst, count); + } } if ((gc_state & ShenandoahHeap::EVACUATION) != 0) { @@ -443,30 +447,13 @@ void ShenandoahBarrierSet::arraycopy_barrier(T* src, T* dst, size_t count) { } } -template +template void ShenandoahBarrierSet::arraycopy_marking(T* dst, size_t count) { assert(_heap->is_concurrent_mark_in_progress(), "only during marking"); if (ShenandoahSATBBarrier) { if (!_heap->marking_context()->allocated_after_mark_start(reinterpret_cast(dst)) || - (_heap->mode()->is_generational() && _heap->heap_region_containing(dst)->is_old() && _heap->is_concurrent_young_mark_in_progress())) { + (IS_GENERATIONAL && _heap->heap_region_containing(dst)->is_old() && _heap->is_concurrent_young_mark_in_progress())) { arraycopy_work(dst, count); -#ifdef ASSERT - if (_heap->heap_region_containing(dst)->is_old()) { - ShenandoahScanRemembered* card_scan = ShenandoahGenerationalHeap::heap()->old_generation()->card_scan(); - T* end = dst + count; - for (T* elem_ptr = dst; elem_ptr < end; elem_ptr++) { - T o = RawAccess<>::oop_load(elem_ptr); - if (!CompressedOops::is_null(o)) { - HeapWord *elem_heap_word_ptr = reinterpret_cast(elem_ptr); - oop obj = CompressedOops::decode_not_null(o); - assert(!_heap->is_in_young(obj) || - card_scan->is_card_dirty(elem_heap_word_ptr) || - card_scan->is_write_card_dirty(elem_heap_word_ptr), - "Card should be dirty if the array element points to obj in young. Array element: " PTR_FORMAT ", young object: " PTR_FORMAT "", p2i(elem_ptr), p2i(obj)); - } - } - } -#endif // ASSERT } } } From fe272ab8ddb8408eee0a7343422c8d61ee04cb5e Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Mon, 8 Dec 2025 14:31:33 -0800 Subject: [PATCH 12/13] Remove header --- src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index d1b71af3de18d..d123c22680f74 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -40,8 +40,6 @@ #include "gc/shenandoah/shenandoahHeap.inline.hpp" #include "gc/shenandoah/shenandoahHeapRegion.hpp" #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" -#include "gc/shenandoah/shenandoahOldGeneration.hpp" -#include "gc/shenandoah/shenandoahScanRemembered.hpp" #include "gc/shenandoah/shenandoahThreadLocalData.hpp" #include "memory/iterator.inline.hpp" #include "oops/oop.inline.hpp" From 9e186a8523dec5cca69d80d628b9ad8d8f4f5b75 Mon Sep 17 00:00:00 2001 From: Xiaolong Peng Date: Mon, 8 Dec 2025 14:42:22 -0800 Subject: [PATCH 13/13] Fix indent --- src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index d123c22680f74..199256ca31b5e 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -430,7 +430,7 @@ void ShenandoahBarrierSet::arraycopy_barrier(T* src, T* dst, size_t count) { // action if we are not marking old. If we are marking old, we must still evaluate the // load reference barrier for a young collection. if (_heap->mode()->is_generational()) { - arraycopy_marking(dst, count); + arraycopy_marking(dst, count); } else { arraycopy_marking(dst, count); }