On Mon, 27 Feb 2023 09:14:56 GMT, Viktor Klang <d...@openjdk.org> wrote:

>> I noticed when looking at the code that there was no real need to use a CHM 
>> to perform the tracking of activation in an ordered fashion on 
>> ForEachOrderedTask, but instead a VarHandle can be used, reducing 
>> allocations and indirection.
>
> Viktor Klang has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains three commits:
> 
>  - Updating copyright header of ForEachOps.java and removing unnecessary 
> suppression of an unchecked cast.
>  - Write the initial value of the next reference without using the VarHandle
>  - JDK-8302666: Replace CHM with VarHandle in ForeachOrderedTask

src/java.base/share/classes/java/util/stream/ForEachOps.java line 513:

> 511:             // of right subtree (if any, which can be this task's right 
> sibling)
> 512:             //
> 513:             var leftDescendant = (ForEachOrderedTask<S, 
> T>)NEXT.getAndSet(this, null);

Casting the `null` is required for the resolved method descriptor to be 
`(ForEachOrderedTask, ForEachOrderedTask)ForEachOrderedTask` instead of 
`(ForEachOrderedTask, Object)ForEachOrderedTask`, which prevents unnecessary 
type conversion `LambdaForm`s from being introduced and allows 
[`VarHandle::withInvokeExactBehavior`] to be used:
Suggestion:

            var leftDescendant = (ForEachOrderedTask<S, T>) 
NEXT.getAndSet(this, (ForEachOrderedTask<S, T>) null);


[`VarHandle::withInvokeExactBehavior`]: 
https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/lang/invoke/VarHandle.html#withInvokeExactBehavior()

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

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

Reply via email to