JDK-8048180 : Investigate early reclaim of large reference arrays
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P4
  • Status: Open
  • Resolution: Unresolved
  • Submitted: 2014-06-26
  • Updated: 2020-01-17
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.
Related Reports
Relates :  
Relates :  
Relates :  
JDK-8027959 introduces early reclamation of large non-reference array objects.

This limitation has shown to not be of concern as large reference arrays tend to be long-lived in the applications this has been tested for.

Investigate impact and usefulness of extending this feature to reference array objects.
Patch enabling eager reclaim of reference objects outside of marking

One could enqueue a large objArrayOop to be scanned for references and put them onto the mark stack. It would also be nice to somehow clean up references from this region to other regions at this point. Actually the other remembered sets contain the locations that need to be scanned for live objects (so you might not need to check the entire objArrayOop). Also, large objects referencing each other cannot be handled (easily) as they keep themselves alive via the remembered sets. However, the early reclaim mechanism should be seen as something for picking low-hanging fruits, not a replacement for the global marking, so this might not be relevant.

Comment from Kim Barrett that must be considered when implementing this: > Here's a specific [problematic] scenario: > > - O1 and O2 are ordinary objects in the same region R, which is an old > generation region. > - H is a humongous object. > - O1 is reachable, and has been scanned. > - O2 is only reachable via H. > > 1. O2 is read from H and stored into O1. > 2. H becomes unreachable. > 3. Evacuation pause eagerly reclaims H. The simplest workaround would be to disable eager reclaim of reference arrays during marking. Marking end will reclaim them "soon" anyway. This would lower the effectiveness of the technique though.