On Sun, 18 Aug 2024 21:27:44 GMT, Claes Redestad <redes...@openjdk.org> wrote:

>> The current implementation of ofDescriptor puts return type and parameter 
>> types together in an ArrayList, and then splits them into return type and 
>> array of parameter types. This ArrayList creation is unnecessary, 
>> considering most descriptors only have few parameter types.
>> 
>> By splitting return type and parameter types separately and scanning the 
>> descriptor first to get the number of parameters, we can just allocate an 
>> exact, trusted array for the resulting MethodTypeDesc without copy.
>
> src/java.base/share/classes/jdk/internal/constant/ConstantUtils.java line 309:
> 
>> 307:     private static ClassDesc resolveClassDesc(String descriptor, int 
>> start, int len) {
>> 308:         if (len == 1) {
>> 309:             return 
>> Wrapper.forPrimitiveType(descriptor.charAt(start)).basicClassDescriptor();
> 
> This was already piggy-backing on a quite fast routine. If it's a clean, 
> significant win then I'm fine with this (untangling `Wrapper` from this is 
> probably good, all things considered), but then we should also clean up 
> `Wrapper` to not carry some descriptors around.

I have removed the Wrapper.forPrimitiveType(char) method. It seems that this is 
the only method that can be removed. Other descriptors related methods still 
need to be used.

> src/java.base/share/classes/jdk/internal/constant/MethodTypeDescImpl.java 
> line 137:
> 
>> 135:         var returnType = resolveClassDesc(descriptor, rightBracket + 1, 
>> retTypeLength);
>> 136:         if (length == 3 && returnType == CD_void) {
>> 137:             return Constants.MTD_void;
> 
> Feels a bit like overfitting with quite limited data.
> 
> Could this use `ConstantDescs.MTD_void` instead or does that cause a 
> bootstrap cycle?

Using ConstantDescs.MTD_void can also solve the bootstrap cycle, good idea, I 
have fixed it

> test/micro/org/openjdk/bench/java/lang/classfile/MethodTypeDescBench.java 
> line 23:
> 
>> 21:  * questions.
>> 22:  */
>> 23: package org.openjdk.bench.java.lang.classfile;
> 
> Wrong package as the code being tested is in java.lang.constant. Also there 
> is already a related microbenchmark in 
> org.openjdk.bench.java.lang.constant.MethodTypeDescFactories - can you check 
> if that covers your needs?

MethodTypeDescFactories has some illegal MethodTypeDesc, and throwing 
exceptions will affect the performance comparison of normal scenarios.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1721080326
PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1721064527
PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1720100307

Reply via email to