JDK-8027454 : Do not traverse string table during G1 remark when treating them as strong roots during initial mark
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: hs25,8
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2013-10-29
  • Updated: 2014-09-19
  • Resolved: 2014-01-20
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.
7u60Fixed 8u20Fixed 9 b03Fixed
Related Reports
Relates :  
Relates :  
During the remark pause G1 traverses the string table, looking for dead oops. This is wasted effort because there cannot be any dead strings currently because:
- the initial mark uses the string table as roots (at the moment unconditionally, later with class unloading conditionally)
- SATB requires that any entries added later than initial mark and before remark must be kept live (and we are not treating them as weak roots anyway).

So there should be no gain looking for dead string table entries at all.

Removing this part of the remark saves ~13% of total remark pause times across a large range of FMW applications.
Log files showing remark pause times for FMW sample applications