Fixed the bug where if a caller keeps a reference to the array passed into 
`MethodTypeDesc.of`, the caller may mutate the Desc via the array and can 
create invalid MethodTypeDesc.

Unfortunately, since the input array now needs to be copied, the `of` factory 
suffers from a performance drop. But otherwise, this patch has minor 
performance gains on `ofDescriptor` factory, even compared to Adam's patch that 
optimized `ofDescriptor` in #12945.

This patch moves the parameters to an immutable list, to avoid allocations on 
`parameterList` as well.

Benchmark of Oracle JDK 20: 
https://gist.github.com/683c6219e183cbc2b336224fc2c0d50a
Benchmark of this patch: 
https://gist.github.com/22be9371a2370fb4a7b44f1684750ec4
Benchmark of [asotona's 
patch](https://github.com/openjdk/jdk/pull/12945/files#diff-ac8e413d3e13532a2b0d34a90253c6ddd7a4f04082f792b9d076e9b5a33f2078):
 https://gist.github.com/eb98579c3b51cafae481049a95a78f80

[sotona vs 
this](https://jmh.morethan.io/?gists=eb98579c3b51cafae481049a95a78f80,22be9371a2370fb4a7b44f1684750ec4);
 [20 vs 
this](https://jmh.morethan.io/?gists=683c6219e183cbc2b336224fc2c0d50a,22be9371a2370fb4a7b44f1684750ec4);
 [20 vs 
sotona](https://jmh.morethan.io/?gists=683c6219e183cbc2b336224fc2c0d50a,eb98579c3b51cafae481049a95a78f80),
 for reference

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

Commit messages:
 - Add benchmark
 - 8304932: MethodTypeDescImpl can be mutated by argument passed to 
MethodTypeDesc.of

Changes: https://git.openjdk.org/jdk/pull/13186/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13186&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8304932
  Stats: 314 lines in 5 files changed: 155 ins; 87 del; 72 mod
  Patch: https://git.openjdk.org/jdk/pull/13186.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13186/head:pull/13186

PR: https://git.openjdk.org/jdk/pull/13186

Reply via email to