RFR: 8254354: Add a withInvokeExactBehavior() VarHandle combinator [v13]
Jorn Vernee
jvernee at openjdk.java.net
Fri Nov 6 17:01:30 UTC 2020
> Hi,
>
> This patch adds an asExact() combinator to VarHandle, that will return a new VarHandle that performs exact type checks, similar to MethodHandle::invokeExact, to help developers catch inexact VarHandle usage, which can lead to performance degradation.
>
> This is implemented using a boolean flag in VarForm. If the flag is set, the exact type of the invocation is checked against the exact type in the VarForm. If there is a mismatch, a WrongMethodTypeException is thrown.
>
> Other than that, there is also an asGeneric() combinator added that does the inverse operation (thanks to Rémi for the suggestion). I've also added The `@Hidden` annotation to the VarHandleGuards methods, as well as a type-checking helper method called from the generic invocation lambda form, so that the stack trace we get points at the location where the VarHandle is being used.
>
> Thanks,
> Jorn
>
> CSR link: https://bugs.openjdk.java.net/browse/JDK-8255375
Jorn Vernee has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 17 additional commits since the last revision:
- Merge branch 'master' into Exact_VarHandle
- Address review comments:
- Fix typo
- add specification about return value of hasInvokeExactBehaviour
- s/an arity/and arity
- behaviour -> behavior in javadoc as well
- - behaviour -> behaviour
- Return same VarHandle instance when instance is already exact/non-exact
- Update Javadoc, and rename asExact and asGeneric to withInvokeExactBehaviour and withInvokeBehaviour
- Merge branch 'master' into Exact_VarHandle
- Use AccessType ordinal in guard checks instead of the AccessMode ordinal
- Update accessModeType to use the AccessType ordinal directly.
- Add benchmarks
- ... and 7 more: https://git.openjdk.java.net/jdk/compare/b6a085d4...ea7c920c
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/843/files
- new: https://git.openjdk.java.net/jdk/pull/843/files/e92bd30f..ea7c920c
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=843&range=12
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=843&range=11-12
Stats: 15154 lines in 825 files changed: 8417 ins; 4076 del; 2661 mod
Patch: https://git.openjdk.java.net/jdk/pull/843.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/843/head:pull/843
PR: https://git.openjdk.java.net/jdk/pull/843
More information about the core-libs-dev
mailing list