RFR: 8338532: Speed up the ClassFile API MethodTypeDesc#ofDescriptor

Shaojin Wen duke at openjdk.org
Mon Aug 19 09:06:53 UTC 2024


On Mon, 19 Aug 2024 06:39:26 GMT, Shaojin Wen <duke at openjdk.org> wrote:

>> I think you can add a case where the parameters are all these vulnerable names like `Ljava/lang/Objecq;` and repeat 8 times, and see how big a negative impact these close mismatches have.
>
> The scenario of `Ljava/lang/Objecq` does not exist. I have added the following:
> 
> (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
> (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
> 
> 
> In these two scenarios, the length of `Ljava/lang/String;` is the same as that of `Ljava/lang/Object;`, and the length of `Ljava/lang/Integer;` is different from that of `Ljava/lang/Object;`, but the performance is similar. This proves that the performance overhead of regionMatches is very small.

Here are the performance numbers running under Aliyun ECS c8i (my MacBook M1 Pro is not available at this time, so the performance test is run on Alibaba Cloud’s ECS)

* CPU Intel®Xeon®Emerald Rapids (Linux x64)

## Benchmark Script


# current
git checkout ee321904e6eee307f27cb38a70ac4ca75a8f446b
make test TEST="micro:java.lang.constant.MethodTypeDescFactories.ofDescriptor"


## Benchmark Numbers

Benchmark                                                                            (descString)  Mode  Cnt     Score    Error  Units
MethodTypeDescFactories.ofDescriptor                      (Ljava/lang/Object;Ljava/lang/String;)I  avgt    6    73.913 ±  0.708  ns/op
MethodTypeDescFactories.ofDescriptor                                                          ()V  avgt    6     1.729 ±  0.013  ns/op
MethodTypeDescFactories.ofDescriptor     (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;  avgt    6    85.204 ±  0.337  ns/op
MethodTypeDescFactories.ofDescriptor     (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;  avgt    6   120.307 ±  1.887  ns/op
MethodTypeDescFactories.ofDescriptor  (Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;  avgt    6   120.832 ±  1.904  ns/op
MethodTypeDescFactories.ofDescriptor                                         ()Ljava/lang/Object;  avgt    6    23.709 ±  0.548  ns/op
MethodTypeDescFactories.ofDescriptor                     ([IJLjava/lang/String;Z)Ljava/util/List;  avgt    6   109.046 ±  1.712  ns/op
MethodTypeDescFactories.ofDescriptor                                        ()[Ljava/lang/String;  avgt    6    30.997 ±  0.556  ns/op
MethodTypeDescFactories.ofDescriptor                                                     (..IIJ)V  avgt    6   179.165 ±  2.371  ns/op
MethodTypeDescFactories.ofDescriptor                                            ([III.Z[B..[.[B).  avgt    6   529.011 ± 12.875  ns/op
MethodTypeDescFactories.ofDescriptor                                     (.....................).  avgt    6  1690.000 ±  9.597  ns/op


This performance number proves my point above that regionMatches has low overhead.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1721452746


More information about the core-libs-dev mailing list