On Sat, 17 Aug 2024 12:04:20 GMT, ExE Boss <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;
Under MacBook M1 Pro, the performance of running the scenario `(Ljava/lang/Object;Ljava/lang/String;)I` multiple times is very different. The above code is rollback verification, but it is found that the problem is not solved. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20611#discussion_r1720767948