RFR: 8372410: ThreadFactory used by Thread.Builder::factory uses non-optimal VarHandle
Hannes Greule
hgreule at openjdk.org
Tue Nov 25 07:55:24 UTC 2025
On Mon, 24 Nov 2025 13:05:40 GMT, Francesco Nigro <duke at openjdk.org> wrote:
> This is boosting VirtualThread allocations while using https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/Thread.Builder.OfVirtual.html#name(java.lang.String,long)
>
> The pattern has been discovered on https://github.com/quarkusio/quarkus/issues/51201 and narrowed down in https://github.com/franz1981/java-puzzles/commit/5cb4216e8d56cdc6c3c23629419158550cbd9068
>
> which, on my machine (Ryzen 7950 w fixed frequency at 4.2 GHz):
>
> Benchmark Mode Cnt Score Error Units
> VarHandlePolymorphicSignatureSensitivity.rightVarHandle avgt 10 1.852 ± 0.007 ns/op
> VarHandlePolymorphicSignatureSensitivity.rightVarHandleConcatIndy avgt 10 9.891 ± 0.103 ns/op
> VarHandlePolymorphicSignatureSensitivity.wrongVarHandle avgt 10 10.430 ± 0.045 ns/op
> VarHandlePolymorphicSignatureSensitivity.wrongVarHandleConcatIndy avgt 10 19.312 ± 0.619 ns/op
>
> where the `right` indy shows:
> <img width="1915" height="469" alt="image" src="https://github.com/user-attachments/assets/4c836389-492b-4cc6-94a3-849f8cf6ea09" />
>
> vs the `wrong` one:
> <img width="1915" height="469" alt="image" src="https://github.com/user-attachments/assets/73765060-8e95-42a2-a03a-4f53f927a8b8" />
I wonder if `MhUtil.findVarHandle(...)` should make VarHandles with invokeExact behavior by default, to catch such problems earlier in the JDK.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/28475#issuecomment-3574208351
More information about the core-libs-dev
mailing list