On Thu, 29 Aug 2024 05:01:52 GMT, Shaojin Wen <[email protected]> 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
The primitive overloads of `loadConstant` avoid extraneous boxing. 👍
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);
src/java.base/share/classes/java/lang/classfile/CodeBuilder.java line 653:
> 651: * @param value the constant value
> 652: * @return this builder
> 653: * @since 23
These are technically since 24.
-------------
PR Review: https://git.openjdk.org/jdk/pull/20761#pullrequestreview-2267692194
PR Review Comment: https://git.openjdk.org/jdk/pull/20761#discussion_r1735577199
PR Review Comment: https://git.openjdk.org/jdk/pull/20761#discussion_r1735575357