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