RFR: 8332586: Avoid cloning empty arrays in java.lang.reflect.{Method,Constructor} [v4]
jengebr
duke at openjdk.org
Fri May 31 17:30:17 UTC 2024
> Improve `java/lang/reflect/Method.java` by eliminating needless cloning of Class[0] instances. This cloning is intended to prevent callers from changing array contents, but many Methods have zero exceptions or zero parameters, and returning the original `Class[0]` is sufficient.
>
> Results from the included JMH benchmark:
> Before:
>
> Benchmark Mode Cnt Score Error Units
> ConstructorBenchmark.getExceptionTypes avgt 5 6.526 ± 0.183 ns/op
> ConstructorBenchmark.getExceptionTypesEmpty avgt 5 5.803 ± 0.073 ns/op
> ConstructorBenchmark.getParameterTypes avgt 5 6.521 ± 0.188 ns/op
> ConstructorBenchmark.getParameterTypesEmpty avgt 5 5.747 ± 0.087 ns/op
> MethodBenchmark.getExceptionTypes avgt 5 6.525 ± 0.163 ns/op
> MethodBenchmark.getExceptionTypesEmpty avgt 5 5.783 ± 0.130 ns/op
> MethodBenchmark.getParameterTypes avgt 5 6.518 ± 0.195 ns/op
> MethodBenchmark.getParameterTypesEmpty avgt 5 5.742 ± 0.028 ns/op
>
>
> After:
>
> Benchmark Mode Cnt Score Error Units
> ConstructorBenchmark.getExceptionTypes avgt 5 6.590 ± 0.124 ns/op
> ConstructorBenchmark.getExceptionTypesEmpty avgt 5 1.351 ± 0.061 ns/op
> ConstructorBenchmark.getParameterTypes avgt 5 6.651 ± 0.132 ns/op
> ConstructorBenchmark.getParameterTypesEmpty avgt 5 1.353 ± 0.150 ns/op
> MethodBenchmark.getExceptionTypes avgt 5 6.701 ± 0.151 ns/op
> MethodBenchmark.getExceptionTypesEmpty avgt 5 1.422 ± 0.025 ns/op
> MethodBenchmark.getParameterTypes avgt 5 6.629 ± 0.142 ns/op
> MethodBenchmark.getParameterTypesEmpty avgt 5 1.273 ± 0.169 ns/op
jengebr has updated the pull request incrementally with one additional commit since the last revision:
rewriting JMH per comments
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/19327/files
- new: https://git.openjdk.org/jdk/pull/19327/files/31b64951..e043fd57
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=19327&range=03
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=19327&range=02-03
Stats: 87 lines in 2 files changed: 72 ins; 1 del; 14 mod
Patch: https://git.openjdk.org/jdk/pull/19327.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/19327/head:pull/19327
PR: https://git.openjdk.org/jdk/pull/19327
More information about the core-libs-dev
mailing list