JDK-8153360 : G1HRRSFlushLogBuffersOnVerify with remembered set verification does not work
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2016-04-04
  • Updated: 2017-08-25
  • Resolved: 2017-07-03
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 10
10 b21Fixed
Related Reports
Blocks :  
Relates :  
Relates :  
Remembered set verification at least with G1HRRSFlushLogBuffersOnVerify introduced by JDK-6817419 does not work.

Several reasons, all related to how the log buffer flushing is done: it calls G1RemSet::update_rs which at the time the flush is done can not be called for several reasons:

- update_rs updates several timing in G1GCPhaseTimes. This means that during GC this data structure will be updated several times for three sets of timings. This actually gives various assertion failures during GC already. (That has been introduced later than this CR).

- G1RemSet::updateRS() needs to have a properly set up the G1RemSet::_cset_rs_update_cl before calling it. This is not done, they are NULL, causing SIGSEGVs.
These _cset_rs_update_cl's would need to be special for updating the remembered set during this time too, i.e. can't use the ones from evacuation. This is not the case.

I think part of the issue is that JDK-8145442 introduced actual remembered set verification. It shows that the log buffer flushing just does not work. Even after fixing the issue with the timing, remembered set verification itself fails. Without -XX:G1HRRSFlushLogBuffersOnVerify, it passes (but I am not sure whether it does something useful then).

G1HRRSFlushLogBuffersOnVerify is a develop-only option, so it can't be enabled on release builds.