RFR: Mixed evacuation [v4]

Kelvin Nilsen kdnilsen at openjdk.java.net
Thu Apr 15 17:40:24 UTC 2021


> This code adds to generational Shenandoah the ability to perform concurrent garbage collection of young-gen and old-gen memory. Following completion of an old-gen concurrent marking effort, we select certain old-gen heap regions to serve as candidates for future collection sets. All dead objects within the old-gen heap regions that are not part of this candidate set are coalesced and filled so that remembered-set scanning of these old-gen heap regions will not be confused by "zombie objects" (objects that old-gen has decided are dead, which reside in regions that have not yet been collected). After concurrently coalescing and filling these dead objects, each subsequent young-gen evacuation pass includes a subset of the old-gen candidates until all candidates have been collected. This code passes TIER1 and hotspot-gc-shenandoah jtreg tests without regressions. A new jtreg test has been added to exercise concurrent old/young GC.

Kelvin Nilsen has updated the pull request incrementally with one additional commit since the last revision:

  Refactor choose_collection_set
  
  Divide the implementation of ShenandoahHeuristic::choose_colection_set() into
  prepare_for_other_collection() and prime_collection_set_with_old_candiates() as
  requested by reviewer of draft pull request.  The resulting code passes TIER1 and
  hotspot_gc_shenandoah jtreg regressions and runs additional generational shenandoah
  stress tests.

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

Changes:
  - all: https://git.openjdk.java.net/shenandoah/pull/29/files
  - new: https://git.openjdk.java.net/shenandoah/pull/29/files/76213506..f6f6a734

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=shenandoah&pr=29&range=03
 - incr: https://webrevs.openjdk.java.net/?repo=shenandoah&pr=29&range=02-03

  Stats: 328 lines in 2 files changed: 140 ins; 127 del; 61 mod
  Patch: https://git.openjdk.java.net/shenandoah/pull/29.diff
  Fetch: git fetch https://git.openjdk.java.net/shenandoah pull/29/head:pull/29

PR: https://git.openjdk.java.net/shenandoah/pull/29


More information about the shenandoah-dev mailing list