RFR (S/M): 8200234: Cleanup Remark and Cleanup pause code

Thomas Schatzl thomas.schatzl at oracle.com
Mon Mar 26 15:59:49 UTC 2018


Hi all,

  can I have reviews for this change that cleans up Remark and Cleanup
pause code?

It mainly moves the record_concurrent_mark_xxx_start/end() methods to
the top/bottom of the remark() and cleanup() methods, and refactors the
verification code into a single method.

There is one more somewhat tricky related change here that fixes the
check_bitmaps() method of that verification: after we swapped bitmaps
(in Cleanup right now) until the previous prev-bitmap has been cleared,
its bits are invalid, and G1HeapVerifier::check_bitmaps() should not
check the next bitmap.

Previously this has been done using the somewhat tricky condition

 674   if (_g1h->collector_state()->mark_or_rebuild_in_progress() ||
!_g1h->_cmThread->in_progress()) {
 675     res_n = verify_no_bits_over_tams("next", next_bitmap, ntams,
end);
 676   }

which you might immediately understand as the best way to prevent
checking the next bitmap from the Cleanup until the (new) next bitmap
has been cleared, but I did not. Further, there is no similarly easy
condition if the bitmap swapping is moved to the Remark pause, so I
created a new flag in G1CollectorState that directly records that we
are currently clearing the next bitmap.

CR:
https://bugs.openjdk.java.net/browse/JDK-8200234
Webrev:
http://cr.openjdk.java.net/~tschatzl/8200234/webrev/
Testing:
hs-tier 1-5

It is based on JDK-8151171 which is also out for review currently.

Thanks,
  Thomas




More information about the hotspot-gc-dev mailing list