On Fri, 5 May 2023 04:48:09 GMT, Chen Liang <li...@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) ?

src/java.base/share/classes/java/lang/invoke/VarHandles.java line 110:

> 108:         }
> 109:         else {
> 110:             if (UNSAFE.shouldBeInitialized(refc)) {

This seems unrelated to the issue this PR is really about (if I understand 
correctly). Would it make sense to address this as part of another PR?

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

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

Reply via email to