On Fri, 16 Aug 2024 23:16:46 GMT, Shaojin Wen <d...@openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/constant/MethodTypeDescImpl.java 
>> line 125:
>> 
>>> 123:         int paramCount = 0;
>>> 124:         for (int cur = start; cur < end; ) {
>>> 125:             int len = ConstantUtils.skipOverFieldSignature(descriptor, 
>>> cur, end, false);
>> 
>> I recall skipping over signatures is the main reason descriptor parsing is 
>> slow. What is the benchmark result if you allocate a buffer array like 
>> `short[] offsets = new short[Math.min(end - start, 255)]` or a `BitSet 
>> offsets = new BitSet(end - start)`?
>
> Allocating a buffer will slow down, so I used a long, with each 8 bits 
> storing a parameter length, which can improve performance when the number of 
> parameters is <= 8.

Since we can't have empty descriptors (`len == 0`) you could leave a 0 in the 
bits to signify that the parameter is too large to fit and then re-parse it in 
the subsequent loop below. Might simplify the control flow a bit (no need for 
`largeParm`, maybe possible to merge the 2nd and 3rd loops)

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

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

Reply via email to