On Fri, 16 Aug 2024 08:53:38 GMT, Shaojin Wen <d...@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/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