RFR: 8238979: Improve G1DirtyCardQueueSet handling of previously paused buffers

sangheon.kim at oracle.com sangheon.kim at oracle.com
Mon Feb 24 22:02:20 UTC 2020

Hi Kim,

On 2/13/20 5:46 PM, Kim Barrett wrote:
> Please review this simplification of the handling of previously paused
> buffers by G1DirtyCardQueueSet.  This change moves the call to
> enqueue_previous_paused_buffers() into record_paused_buffer().  This
> ensures any paused buffers from a previous safepoint have been flushed
> out before recording a buffer for the next safepoint.
> This move eliminates the former precondition that the enqueue had to
> have been performed before recording.
> This move also permits the enqueue_previous_paused_buffers in
> get_completed_buffer() to be moved to a point where it will be called
> much more rarely, slightly improving the normal performance of
> get_dirtied_buffer.  The old location of the call was in support of
> the call order invariant needed by record_paused_buffer().
> As a consequence of the changed enqueue locations, the fast path check
> in enqueue_previous_paused_buffers() will now only rarely succeed, and
> is no longer worth the (very small) performance cost and (much more
> importantly) the largish block comment arguing its correctness.  So
> that fast path is removed.  And since the raison d'etre for
> PausedBuffers::is_empty() was to support that fast path, that function
> is also removed.
> CR:
> https://bugs.openjdk.java.net/browse/JDK-8238979
> Webrev:
> https://cr.openjdk.java.net/~kbarrett/8238979/open.00/
> Testing:
> mach5 tier1-5 in conjunction with other in-development changes.
> Local (linux-x64) hotspot:tier1 for this change in isolation.
Looks good to me.



More information about the hotspot-gc-dev mailing list