RFR: 8360046: Scalability issue when submitting virtual threads with almost empty tasks [v5]
Doug Lea
dl at openjdk.org
Mon Sep 15 12:01:30 UTC 2025
On Thu, 14 Aug 2025 11:34:19 GMT, Viktor Klang <vklang at openjdk.org> wrote:
>> Doug Lea has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Avoid underutilization on resize
>
> src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 1290:
>
>> 1288: if (room == 0) { // resize
>> 1289: growArray(a, cap, s);
>> 1290: a = null;
>
> Suggestion:
>
> a = null; // Indicate resize to trigger signalling
(No longer applies)
> src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 1299:
>
>> 1297: if (pool != null &&
>> 1298: (a == null || // always signal on resize
>> 1299: U.getReferenceAcquire(a, slotOffset(m & (s - 1))) == null))
>
> @DougLea Interesting. Is the reason that it is cheaper to check `a` for null here that it elides a nullcheck in the getReferenceAcquire? (even if it adds the cost of nulling out `a` after growArray())
(No longer applies)
> src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java line 2003:
>
>> 2001: continue rescan;
>> 2002: if (b == (b = q.base) && a[bk] == null) {
>> 2003: if (a[nk] == null && a[(b + 2) & m] == null) {
>
> @DougLea Seems worth it to add a comment around why we're looking at b + 2 here.
sorta done (but with implicit ref to leading docs)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26479#discussion_r2348768921
PR Review Comment: https://git.openjdk.org/jdk/pull/26479#discussion_r2348765617
PR Review Comment: https://git.openjdk.org/jdk/pull/26479#discussion_r2348767307
More information about the core-libs-dev
mailing list