On Tue, 20 Sep 2022 13:08:20 GMT, Adam Sotona <[email protected]> wrote:
> Parsing performance of `j.l.c.MethodTypeDescriptor::ofDescriptor` can be
> significantly improved and add performance boost to intensive users.
>
> Two main reasons have been identified and fixed in this patch:
>
> First glitch is late insertion of return type to the first position of
> `j.u.ArrayList`, causing all previously parsed parameter types to shift using
> `System::arraycopy`.
>
> Proposed patch inserts a placeholder for the return type first and replaces
> it with return type later.
>
> Second performance degradation is in
> `MethodTypeDescriptor::skipOverFieldSignature`, where each identified class
> descriptor is exactly located by `String::indexOf`, extracted by
> `String::substring`, and passed for for the purpose of verification to
> `ConstantUtils::verifyUnqualifiedClassName`.
>
> Proposed patch inlines the unqualified class name verification into
> `ConstantUtils::skipOverFieldSignature` parsing loop and so eliminates calls
> of `String::indexOf` and `String::substring`. Package private method
> `ConstantUtils::verifyUnqualifiedClassName` has no other use within the
> package, so it is removed.
>
> Please review proposed performance improving patch.
>
> Thanks,
> Adam
src/java.base/share/classes/java/lang/constant/ConstantUtils.java line 217:
> 215: }
> 216: case '/' -> {
> 217: if (!legal) return 0;
IIUC that works to reject `//` and trailing `/`, but does not reject leading
`/`? which the previous code rejected.
-------------
PR: https://git.openjdk.org/jdk/pull/10358