On Tue, 25 Feb 2025 14:51:29 GMT, Viktor Klang <vkl...@openjdk.org> wrote:
>> Doug Lea has updated the pull request incrementally with one additional >> commit since the last revision: >> >> Standardize parameter checking > > src/java.base/share/classes/java/util/concurrent/DelayScheduler.java line 455: > >> 453: final long nextDelay; // 0: once; <0: fixedDelay; >0: >> fixedRate >> 454: int heapIndex; // if non-negative, index on heap >> 455: final boolean isImmediate; // run by scheduler vs submitted >> when ready > > If desired, it would be possible to create a bitset for `isImmediate` and > `isCallable` such that we could get rid of a reference field per > ScheduledForkJoinTask. > I suspect it would also be possible to use the same field for `pool` and > `result` as there shouldn't be a result available for as long as `pool` is > non-null. > > Might not be worth doing at this point, but saving 2 reference fields for > something which might get allocated millions of times might be worth it? I tried a few variants and didn't see improvements. But I added a sentence to doc with my guess why: * (We use the same structure for both * Runnable and Callable versions, since including an extra field * in either case doesn't hurt -- it seems mildly preferable * for these objects to be larger than other kinds of tasks to * reduce false sharing during possibly frequent bookkeeping * updates. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/23702#discussion_r1970539084