On Fri, 5 May 2023 13:00:11 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> 
wrote:

>> Also fixed the bug with NPE in `IndirectVarHandle::isAccessModeSupported`.
>> 
>> A few implementation-detail methods in VarHandle are now documented with the 
>> implied constraints to avoid subtle problems in the future. Changed 
>> `IndirectVarHandle` to call `asDirect` lazily to accomodate the lazy 
>> VarHandle changes. Also changed VarHandleBaseTest to report the whole 
>> incorrect type of exception caught than swallow it and leaving only a 
>> message.
>> 
>> Current problems:
>> - [ ] The lazy var handle is quite slow on the first invocation.
>>    - As seen in the benchmark, users can first call 
>> `Lookup::ensureInitialized` to create an eager handle.
>>    - After that, the lazy handle has a performance on par with the regular 
>> var handle.
>> - [ ] The class-loading-based test is not in a unit test
>>    - The test frameworks don't seem to offer fine-grained control for 
>> class-loading detection or reliable unloading
>> 
>> 
>> Benchmark                                            Mode  Cnt       Score   
>>      Error  Units
>> VarHandleLazyStaticInvocation.initializedInvocation  avgt   30       0.769 ± 
>>      0.003  ns/op
>> VarHandleLazyStaticInvocation.lazyInvocation         avgt   30       0.767 ± 
>>      0.002  ns/op
>> VarHandleLazyStaticCreation.eagerInitialize            ss   10  348580.000 ± 
>> 115234.161  ns/op
>> VarHandleLazyStaticCreation.lazyInitialize             ss   10  961670.000 ± 
>> 154813.238  ns/op
>
> src/java.base/share/classes/java/lang/invoke/IndirectVarHandle.java line 74:
> 
>> 72:     @Override
>> 73:     public boolean isAccessModeSupported(AccessMode accessMode) {
>> 74:         var directTarget = this.directTarget;
> 
> Why is this not defined in the superclass, and then use `asDirect` (as done 
> in other cases) ?

I aim to avoid eager evaluation of directTarget (which is lazy in 
LazyStaticVarHandle, computing it requires initializing the holder class). This 
code path checks a stable field, so it should allow constant-folding when the 
direct target is available.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13821#discussion_r1186070262

Reply via email to