On Fri, 30 Aug 2024 00:19:35 GMT, ExE Boss <d...@openjdk.org> wrote:

>> TypeKind.from(Class) is a frequently called method, which provides a 
>> specialized method to improve performance.
>> 
>> The following Compiler log shows that the call stack level is reduced and 
>> two reference accesses (descriptorString() -> String.value) are reduced, 
>> which can reduce the performance degradation caused by cache misses.
>> 
>> * baseline
>> 
>> @ 48   java.lang.classfile.TypeKind::from (25 bytes)   inline
>>   @ 1   java.lang.Class::isPrimitive (0 bytes)   intrinsic
>>   @ 10   java.lang.Class::descriptorString (170 bytes)   failed to inline: 
>> callee is too large
>>   @ 15   java.lang.classfile.TypeKind::fromDescriptor (232 bytes)   failed 
>> to inline: callee is too large
>> 
>> 
>> * current
>> 
>> @ 52   java.lang.classfile.TypeKind::from (103 bytes)   failed to inline: 
>> callee is too large
>
> src/java.base/share/classes/java/lang/classfile/TypeKind.java line 176:
> 
>> 174:         if (cl == double.class ) return DoubleType;
>> 175:         if (cl == void.class   ) return VoidType;
>> 176:         else                     return ReferenceType;
> 
> This can call `Class​::isPrimitive()` to perform an implicit null check and 
> short‑circuit for reference types:
> Suggestion:
> 
>         if (cl.isPrimitive()) { // implicit null check
>             if (cl == boolean.class) return BooleanType;
>             if (cl == byte.class   ) return ByteType;
>             if (cl == char.class   ) return CharType;
>             if (cl == int.class    ) return IntType;
>             if (cl == long.class   ) return LongType;
>             if (cl == short.class  ) return ShortType;
>             if (cl == float.class  ) return FloatType;
>             if (cl == double.class ) return DoubleType;
>             if (cl == void.class   ) return VoidType;
>         }
>         return ReferenceType;

https://github.com/openjdk/jdk/pull/20759#issuecomment-2317655533 
Refer to @cl4es 's comment, isPrimitive is a native method and will be slow

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20762#discussion_r1737599447

Reply via email to