diff --git a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp index fda97c4836e..1e63d56844c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentGC.cpp @@ -640,10 +640,6 @@ void ShenandoahConcurrentGC::op_reset() { } else { _generation->prepare_gc(); } - - if (heap->mode()->is_generational()) { - heap->old_generation()->card_scan()->mark_read_table_as_clean(); - } } class ShenandoahInitMarkUpdateRegionStateClosure : public ShenandoahHeapRegionClosure { diff --git a/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp b/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp index c941379d576..0f21775c58c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp @@ -136,15 +136,11 @@ void ShenandoahDegenGC::op_degenerated() { heap->set_unload_classes(_generation->heuristics()->can_unload_classes() && (!heap->mode()->is_generational() || _generation->is_global())); - if (heap->mode()->is_generational()) { - // Clean the read table before swapping it. The end goal here is to have a clean - // write table, and to have the read table updated with the previous write table. - heap->old_generation()->card_scan()->mark_read_table_as_clean(); + op_reset(); - if (_generation->is_young()) { - // Swap remembered sets for young - _generation->swap_card_tables(); - } + if (heap->mode()->is_generational() && _generation->is_young()) { + // Swap remembered sets for young + _generation->swap_card_tables(); } case _degenerated_roots: @@ -182,8 +178,6 @@ void ShenandoahDegenGC::op_degenerated() { } } - op_reset(); - // STW mark op_mark(); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp index 9a511de939c..53e462d2d38 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahGeneration.cpp @@ -246,6 +246,11 @@ void ShenandoahGeneration::merge_write_table() { void ShenandoahGeneration::prepare_gc() { reset_mark_bitmap(); + + ShenandoahHeap* const heap = ShenandoahHeap::heap(); + if (heap->mode()->is_generational()) { + heap->old_generation()->card_scan()->mark_read_table_as_clean(); + } } void ShenandoahGeneration::parallel_heap_region_iterate_free(ShenandoahHeapRegionClosure* cl) {