RFR: 8309413: General improvements to MethodTypeDesc implementation [v4]
Chen Liang
liach at openjdk.org
Sun Jun 4 23:52:37 UTC 2023
On Fri, 26 May 2023 20:41:36 GMT, Mandy Chung <mchung at openjdk.org> wrote:
>> Chen Liang has refreshed the contents of this pull request, and previous commits have been removed. Incremental views are not available.
>
> The microbenchmark shows the performance of using the `MethodTypeDesc` factory methods. With [#13671](https://github.com/openjdk/jdk/pull/13671), `MethodTypeDesc` is cached and I wonder if this is no longer the bottleneck of ClassFile API performance.
>
> [JDK-8304932](https://bugs.openjdk.org/browse/JDK-8304932) is a bug that can simply be fixed by
>
> diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
> index 738c4d68a43..ed23887c9ef 100644
> --- a/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
> +++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDesc.java
> @@ -95,7 +95,7 @@ public sealed interface MethodTypeDesc
> * {@link ClassDesc} for {@code void}
> */
> static MethodTypeDesc of(ClassDesc returnDesc, ClassDesc... paramDescs) {
> - return new MethodTypeDescImpl(returnDesc, paramDescs);
> + return new MethodTypeDescImpl(returnDesc, paramDescs.clone());
> }
>
> /**
> diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
> index 4341c3fb56f..8586bfb5926 100644
> --- a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
> +++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
> @@ -41,7 +41,7 @@ import static java.util.Objects.requireNonNull;
> */
> final class MethodTypeDescImpl implements MethodTypeDesc {
> private final ClassDesc returnType;
> - private final ClassDesc[] argTypes;
> + private final ClassDesc[] argTypes; // trusted array
>
> /**
> * Constructs a {@linkplain MethodTypeDesc} with the specified return type
> @@ -102,14 +102,14 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
>
> @Override
> public MethodTypeDesc changeReturnType(ClassDesc returnType) {
> - return MethodTypeDesc.of(returnType, argTypes);
> + return new MethodTypeDescImpl(returnType, argTypes);
> }
>
> @Override
> public MethodTypeDesc changeParameterType(int index, ClassDesc paramType) {
> ClassDesc[] newArgs = argTypes.clone();
> newArgs[index] = paramType;
> - return MethodTypeDesc.of(returnType, newArgs);
> + return new MethodTypeDescImpl(returnType, newArgs);
> }
>
> @Override
> @@ -120,7 +120,7 @@ final class MethodTypeDescImpl implements MethodTypeDesc {
> Cl...
@mlchung I have updated this patch to no longer change the array to a list. Could you take a look? I wish this to be integrated into JDK 21 as it does bring a lot of performance benefits.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13186#issuecomment-1575808993
More information about the core-libs-dev
mailing list