RFR: 8048180: Eager reclaim of humongous objects with references [v4]

Thomas Schatzl tschatzl at openjdk.org
Thu Oct 9 12:39:53 UTC 2025


> Hi all,
> 
>   please review this change to G1 that enables eager reclaim of humongous objects with references, either objArrays or just really large objects.
> 
> It works the same as other humongous object's eager reclaim, with the caveat that I disabled it during concurrent mark to avoid problems with SATB. There is fairly extensive documentation about why I think this works, and how in the comment in `g1YoungCollector.cpp`.
> 
> The test case exhaustively tests all combinations of when a particular type of object should be able to be reclaimed depending on when it is allocated (only for `typeArray` and `objArray` - huge objects work the same as the latter).
> 
> I added a diagnostic flag `G1EagerReclaimWithRefs` to allow disabling this particular functionality for diagnostic purposes, but I think it's not really necessary, and I'm open to remove it.
> 
> The following screenshot shows pause times before (purple) and after (brown) of one of the [Optaplanner](https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html) benchmarks as a result of this change.
>  
> <img width="702" height="485" alt="Screenshot 2025-09-26 at 13 59 05" src="https://github.com/user-attachments/assets/995e9e27-f861-44bd-8ced-3bd952e314e8" />
> 
> Testing: new test cases, gha, tier1-5
> 
> Thanks,
>   Thomas

Thomas Schatzl has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:

 - Merge branch 'master' into 8048180-investigate-eager-reclaim-of-reference-arrays
 - * more documentation work
 - * walulyai review, improved comments, example
 - * also check for actual region reclamation
   
   * enable reference array reclaim anywhere during non-marking, enable during rebuild
   
   * additional test for all situation
   
   * fix guarantee for humongous regular objects
   
   * need to clear card table of eagerly reclaimed regions
   
   * do not redirty recently freed humongous regions to avoid stray card marks
   
   * card table of humongous-continues regions has not been cleared
   
   * some cleanup
   
   * include non-typeArrays allocated after mark start in candidates
   * and allow non-typeArray candidates right after marking completed
   
   * update test case to also check allocations after marking
   * additional documentation
   
   * rename test case
   
   * more explanations
   
   * move back free humongous regions to post evacuate 2. There does not seem to be a reason to put it there, and it clashes with RecalculateUsedTask.

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/27525/files
  - new: https://git.openjdk.org/jdk/pull/27525/files/7bf219a8..afcac13a

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=27525&range=03
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27525&range=02-03

  Stats: 33737 lines in 1034 files changed: 19851 ins; 7931 del; 5955 mod
  Patch: https://git.openjdk.org/jdk/pull/27525.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27525/head:pull/27525

PR: https://git.openjdk.org/jdk/pull/27525


More information about the hotspot-gc-dev mailing list