JDK-8260497 : Shenandoah: Improve SATB flushing
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 8-shenandoah,11,16,17
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2021-01-27
  • Updated: 2021-02-17
  • Resolved: 2021-01-28
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 11 JDK 17
11.0.11Fixed 17 b08Fixed
Related Reports
Relates :  
Description
Currently, we periodically force flushing of SATB queues. This works by activating a flag every 100ms in every thread, which causes that thread to enqueue its SATB buffer the next time it overflows, even if it doesn't meet its threshold after filtering. This is somewhat problematic when a thread does not actually overflow its SATB queue in time. The whole point of the exercise is to try and avoid having too much left-over work when we reach final-mark.

We can do better than that: when concurrent mark is done we can handshake all threads, and let them flush their respective SATB queues, and re-enter concurrent mark loop again, until flushing yields no more work. Experiments show that it usually takes 1-3 flushes to clean out leftover work properly.
Comments
Fix Request (11u) This fixes a minor Shenandoah performance pothole. The patch is completely in Shenandoah code. 11u RFR (acked by rkennke): https://mail.openjdk.java.net/pipermail/jdk-updates-dev/2021-February/004997.html
16-02-2021

Changeset: 316d52c1 Author: Roman Kennke <rkennke@openjdk.org> Date: 2021-01-28 09:50:21 +0000 URL: https://git.openjdk.java.net/jdk/commit/316d52c1
28-01-2021