RFR: 8377011: Shenandoah: assert_bounds should be only called when boundaries have changed

Xiaolong Peng xpeng at openjdk.org
Tue Feb 3 00:44:06 UTC 2026


This fix the problem causing following 3 jtreg tests with tlab disabled to fail:

gc/shenandoah/TestRetainObjects.java#no-tlab 8361099 generic-all
gc/shenandoah/TestSieveObjects.java#no-tlab 8361099 generic-all
gc/shenandoah/TestSieveObjects.java#no-tlab-genshen 8361099 generic-all



The problem is assert_bounds is always called from function ShenandoahFreeSet::try_allocate_in, no matter the boundaries have changed or not after the allocation,  this is new behavior introduced by https://bugs.openjdk.org/browse/JDK-8365880, before which assert_bounds was only called after retiring a region.

The fix is to call assert_bounds only when boundaries have changed:
1. When retire a region;
2. When a the object is allocated in a new region - one region became non-empty.

There is also minor improvement to the if-else code in the PR.

Overall the change should be safe and only affect Shenandoah related tests, I have run Shenandoah test suite on MacOS.

Profiler data from the problematic jtreg test: [jtreg-gc_shenandoah_TestRetainObjects_no_tlab.html](https://github.com/user-attachments/files/25027324/jtreg-gc_shenandoah_TestRetainObjects_no_tlab.html) 

### Tests
- [x] hotspot_gc_shenandoah
- [ ] GHA

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

Commit messages:
 - assert_bounds should be only called when boundaries have changed

Changes: https://git.openjdk.org/jdk/pull/29537/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29537&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8377011
  Stats: 20 lines in 2 files changed: 11 ins; 8 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/29537.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29537/head:pull/29537

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


More information about the shenandoah-dev mailing list