RFR (XS) 8243291: Shenandoah: no need to retire TLABs at Init Update Refs
Aleksey Shipilev
shade at redhat.com
Tue Apr 21 17:48:03 UTC 2020
RFE:
https://bugs.openjdk.java.net/browse/JDK-8243291
After JDK-8240872, we update URWM (update reference watermark) at final-mark, where we retire TLABs
already. So we don't need to retire TLABs at Init Update Refs, because they are guaranteed to be
past URWM. It used to be needed when we were capturing update-refs limit during init-update-refs.
This patch saves about 1.5G of waste on 30G heap in a throwaway scenario for me.
diff -r 6fd1fbd073e2 src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
--- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Apr 21 19:04:23 2020 +0200
+++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp Tue Apr 21 19:46:05 2020 +0200
@@ -1524,7 +1524,11 @@
assert_pinned_region_status();
}
- // Force the threads to reacquire their TLABs outside the collection set.
+ // Retire the TLABs, which will force threads to reacquire their TLABs after the pause.
+ // This is needed for two reasons. Strong one: new allocations would be with new freeset,
+ // which would be outside the collection set, so no cset writes would happen there.
+ // Weaker one: new allocations would happen past update watermark, and so less work would
+ // be needed for reference updates (would update the large filler instead).
{
ShenandoahGCSubPhase phase(ShenandoahPhaseTimings::retire_tlabs);
make_parsable(true);
@@ -2449,10 +2453,6 @@
{
ShenandoahGCSubPhase phase(ShenandoahPhaseTimings::init_update_refs_prepare);
-
- make_parsable(true);
-
- // Reset iterator.
_update_refs_iterator.reset();
}
Testing: hotspot_gc_shenandoah {fastdebug,release}
--
Thanks,
-Aleksey
More information about the hotspot-gc-dev
mailing list