-
Enhancement
-
Resolution: Fixed
-
P4
-
14
-
b14
Concurrent and STW refinement are currently implemented via some shared code in G1DirtyCardQueueSet, with an externally provided closure for the STW case. As a result of this structure
* STW refinement needs to go through the DCQS lock and deal with the head/tail/count in the DCQS list representation.
* STW refinement performs a useless stop_at check.
* The yield to safepoint request handling in the concurrent case is embedded in the closure and reported by the bool return value, making for some awkwardness and ambiguity in the shared helper code as to whether the current card was processed or not.
* STW refinement needs to have a closure that returns bool but always returns a true value.
Separating these two cases could make both cases simpler and easier to understand, and might provide some small performance benefit by avoiding a lock in STW refinement.
* STW refinement needs to go through the DCQS lock and deal with the head/tail/count in the DCQS list representation.
* STW refinement performs a useless stop_at check.
* The yield to safepoint request handling in the concurrent case is embedded in the closure and reported by the bool return value, making for some awkwardness and ambiguity in the shared helper code as to whether the current card was processed or not.
* STW refinement needs to have a closure that returns bool but always returns a true value.
Separating these two cases could make both cases simpler and easier to understand, and might provide some small performance benefit by avoiding a lock in STW refinement.
- relates to
-
JDK-8338315 G1: G1CardTableEntryClosure:do_card_ptr remove unused parameter worker_id
-
- Resolved
-