On Fri, 16 Aug 2024 08:53:38 GMT, Shaojin Wen <[email protected]> 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/MethodTypeDescImpl.java line
154:
> 152: if (num >= 0) {
> 153: int shift = num << 3;
> 154: len = (int) ((lengths & (0xFFL << shift)) >> shift) &
> 0xFF;
The `0xFFL << shift` step is unnecessary with the trailing `& 0xFF`:
Suggestion:
len = (int) (lengths >>> shift) & 0xFF;
src/java.base/share/classes/jdk/internal/constant/PrimitiveClassDescImpl.java
line 68:
> 66:
> 67: /** {@link ClassDesc} representing the primitive type {@code void} */
> 68: public static final PrimitiveClassDescImpl CD_void = new
> PrimitiveClassDescImpl("V");
Since all the `PrimitiveClassDescImpl` instances are now created in this class,
the constructor can probably be made `private`.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1720766760
PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1721018923