RFR: 8339217: Optimize ClassFile API loadConstant
Shaojin Wen
swen at openjdk.org
Thu Aug 29 06:04:46 UTC 2024
On Thu, 29 Aug 2024 05:11:36 GMT, Chen Liang <liach at openjdk.org> wrote:
>> This is a large method. By splitting it into multiple methods with the same name, the caller can automatically select based on the different types of parameters, avoiding this large call that cannot be inlined, which can also improve startup performance.
>>
>> * current
>>
>> CodeBuilder {
>> default CodeBuilder loadConstant(ConstantDesc value) { ... }
>> }
>>
>> java.lang.classfile.CodeBuilder::loadConstant (465 bytes) failed to inline: callee is too large
>
> src/java.base/share/classes/java/lang/classfile/CodeBuilder.java line 646:
>
>> 644: if (value instanceof Float ) return loadConstant((float) value);
>> 645: if (value instanceof Double ) return loadConstant((double) value);
>> 646: else return ldc(value);
>
> I think we need to rearrange this to follow the code style, like:
>
> if (value instanceof Number) {
> if (value instanceof Integer i)
> return loadConstant(i);
> if (value instanceof Long l)
> return loadConstant(l);
> if (value instanceof Float f)
> return loadConstant(f);
> if (value instanceof Double d)
> return loadConstant(d);
> }
> if (value == null || value == ConstantDescs.NULL)
> return aconst_null();
> return ldc(value);
Many parts of the existing JDK code are written in this style, which looks clean and easy to read.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20761#discussion_r1735605374
More information about the core-libs-dev
mailing list