On Mon, 24 Nov 2025 17:17:37 GMT, Chen Liang <[email protected]> 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";
>>  />
>
> This is not the first time this VarHandle problem is hit - see #16451

> This has bitten me lot of times @liach 😢 Including others while 
> reading/writing oop fields into arrays too; it would be nice to get an option 
> to fail fast with an exception enabled via diagnostic args eg 
> EnableStrictPolymorphicSignature Although Javac should be able to detect it 
> too, thinking about it twice

This can be done using 
[`VarHandle::withInvokeExactBehavior`](https://docs.oracle.com/en/java/javase/24/docs/api/java.base/java/lang/invoke/VarHandle.html#withInvokeExactBehavior())
 on a per var handle basis. C2 can constant fold the type-check away as well.

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

PR Comment: https://git.openjdk.org/jdk/pull/28475#issuecomment-3572364123

Reply via email to