RFR: 8238979: Improve G1DirtyCardQueueSet handling of previously paused buffers
stefan.johansson at oracle.com
Wed Feb 26 09:07:08 UTC 2020
> 14 feb. 2020 kl. 02:46 skrev Kim Barrett <kim.barrett at oracle.com>:
> 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.
> mach5 tier1-5 in conjunction with other in-development changes.
> Local (linux-x64) hotspot:tier1 for this change in isolation.
More information about the hotspot-gc-dev