RFR: 8306774: Make runtime/Monitor/GuaranteedAsyncDeflationIntervalTest.java more reliable

Aleksey Shipilev shade at openjdk.org
Tue Apr 25 09:08:15 UTC 2023


As seen in some CI runs, doing `Object.wait(1)` to inflate 10K monitors can take quite a while. One of the test cases implicitly relies on threshold heuristics kicking in before the guaranteed interval of 5 seconds expires. Even if we wait for 1ms for each `wait` call, we only inflate 5K monitors in those 5 seconds. Which is okay for 5s and 10% threshold test, which would fire after about 1K monitors inflated. But we can also stall for longer -- because `wait(1)` is not guaranteed to return in 1ms, subject to locking granularity -- which means we can inflate less that 1K monitors, which would mean the threshold heuristics would not fire.

This fix strengthens the test in two ways: 
  1. Uses `Object.hashCode` to inflate the monitors; in my tests, this is about 30x faster than `Object.wait(1)`.
  2. Drops the threshold heuristics threshold to minimum value to increase the chances of it firing.

This also makes the test faster.

@dcubed-ojdk, you might want to run this through your CI to see if it fixes the test troubles.

Additional testing:
 - [x] Ad-hoc runs of the test, 100 iterations without trouble.

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

Commit messages:
 - Drop MUDT to 1 to increase the chances
 - Fix

Changes: https://git.openjdk.org/jdk/pull/13634/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13634&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8306774
  Stats: 13 lines in 2 files changed: 2 ins; 4 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/13634.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13634/head:pull/13634

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


More information about the hotspot-runtime-dev mailing list