RFR: 8343704: Bad GC parallelism with processing Cleaner queues [v14]

Aleksey Shipilev shade at openjdk.org
Thu Nov 21 07:13:18 UTC 2024


On Thu, 21 Nov 2024 05:42:09 GMT, Brent Christian <bchristi at openjdk.org> wrote:

>> Aleksey Shipilev has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Check all elements are removable after random test
>
> test/micro/org/openjdk/bench/java/lang/ref/CleanerGC.java line 45:
> 
>> 43: 
>> 44:     // Deliberately a linked list to avoid exposing external parallelism to GC.
>> 45:     Target prev;
> 
> Is `CleanerGC.prev` used?

Yes. It maintains the root of a reachable linked list of `Target`-s.

> test/micro/org/openjdk/bench/java/lang/ref/CleanerGC.java line 57:
> 
>> 55:     @Benchmark
>> 56:     public void test() {
>> 57:         System.gc();
> 
> How confident are we that most/all/(any?) `Target` objects are being collected?

The point of this test is not collecting `Target`-s -- they are all reachable. The point of this test is to make GC walk the large linked list of `PhantomCleanable`-s during GC, which replicates what we see in prod-like scenarios.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22043#discussion_r1851475659
PR Review Comment: https://git.openjdk.org/jdk/pull/22043#discussion_r1851474396


More information about the core-libs-dev mailing list