JDK-8266821 : G1: Prefetch cards during merge heap roots phase
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 17
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2021-05-10
  • Updated: 2021-05-20
  • Resolved: 2021-05-13
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 17
17 b23Fixed
Related Reports
Relates :  
Description
Merging heap roots (remembered sets and log buffers) into the card table for later scanning to a large degree constitutes random accesses to the card table.

Putting a small prefetch queue between calculating the card table address and inspecting the given card table value decreases merge remembered set time by 20-30% and merge log buffers time by 40-50% (on x64. AArch64 shows similar if not better improvements).

Applications not having a significant amount of either remembered sets or log buffers do not show significant difference.

Comments
Changeset: a564f2cb Author: Thomas Schatzl <tschatzl@openjdk.org> Date: 2021-05-13 11:22:31 +0000 URL: https://git.openjdk.java.net/jdk/commit/a564f2cbd59d40df21278c5f0d785e2375b310e4
13-05-2021

The 20210505 graph shows length of merge log buffers time during mixed gc before and after adding prefetching on BigRAMTester (i.e. a load having millions log buffers before gc) during mixed gc. The 20210426 graph shows just merge remembered set time.
10-05-2021