-
Bug
-
Resolution: Fixed
-
P4
-
11.0.1, 15
-
generic
-
generic
The Shenandoah control thread checks for cancellation after concurrent mark completes, but before the final mark safe point. Though there isn't much code for the thread to execute between the last cancellation check and the final mark safepoint, an allocation failure here will have final mark throw out the marking progress and the next cycle will be degenerated as though the allocation failure occurred outside the cycle - the entire mark will happen again on the safepoint.
If the final mark operation did _nothing_ for the cancellation case and the control thread checks for cancellation _after_ the final mark operation, the degeneration point could be _degenerated_mark and the degenerated cycle would not have to remark the live objects.
If the final mark operation did _nothing_ for the cancellation case and the control thread checks for cancellation _after_ the final mark operation, the degeneration point could be _degenerated_mark and the degenerated cycle would not have to remark the live objects.