RFR: 8329570: G1: Excessive is_obj_dead_cond calls in verification

Stefan Karlsson stefank at openjdk.org
Wed Apr 3 08:58:30 UTC 2024


While investigating [JDK-8329314](https://bugs.openjdk.org/browse/JDK-8329314) it was found that G1 was slower than Parallel when allocating objects because of the extra verification when running with fastdebug builds.

This tiny tests takes 30s with G1:

public class Test {
    static int n = 847734685;

    public static void main(String[] args) {
         String[] strs = new String[n + 1];
    }
}


A large portion of that time is spent inside this assert:

    assert(!G1CollectedHeap::heap()->is_obj_dead_cond(_containing_obj, _vo), "Precondition");

which is called for every single oop in the _containing_obj. If I move this assert to where _containing_obj is initialized, the test now completes in 4-5 seconds. I propose that we make this tiny change to improve the speed of the debug builds.

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

Commit messages:
 - 8329570: G1: Excessive is_obj_dead_cond calls in verification

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

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


More information about the hotspot-gc-dev mailing list