RFR: 8338544: Dedicated Array class descriptor implementation

ExE Boss duke at openjdk.org
Wed Sep 25 18:54:03 UTC 2024


On Wed, 21 Aug 2024 20:25:07 GMT, Chen Liang <liach at openjdk.org> wrote:

> @cl4es discovered that Stack Map generation in ClassFile API uses `componentType` and `arrayType` for `aaload` `aastore` instructions, which are currently quite slow. We can split out array class descriptors from class or interfaces to support faster `arrayType` and `componentType` operations.
> 
> Tentative, as I currently have no way to measure the actual impact of this patch on the startup performance; however, this made the `ClassDesc` implementations much cleaner.

Apparently, changing method `default`‑ness requires a CSR (even for fully sealed hierarchies), but I can’t find the PR where I was informed of this.

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

Using `return this instanceof <type>ClassDescImpl` might allow **C2** to better avoid megamorphic virtual invocations (see [GH‑17488]), but this needs to be benchmarked:

[GH‑17488]: https://github.com/openjdk/jdk/pull/17488

src/java.base/share/classes/java/lang/constant/ClassDesc.java line 237:

> 235:      */
> 236:     default boolean isArray() {
> 237:         return false;

Suggestion:

        return this instanceof ArrayClassDescImpl;

src/java.base/share/classes/java/lang/constant/ClassDesc.java line 246:

> 244:      */
> 245:     default boolean isPrimitive() {
> 246:         return false;

Suggestion:

        return this instanceof PrimitiveClassDescImpl;

src/java.base/share/classes/java/lang/constant/ClassDesc.java line 255:

> 253:      */
> 254:     default boolean isClassOrInterface() {
> 255:         return false;

Suggestion:

        return this instanceof ReferenceClassDescImpl;

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

PR Review: https://git.openjdk.org/jdk/pull/20665#pullrequestreview-2263259130
PR Review Comment: https://git.openjdk.org/jdk/pull/20665#discussion_r1732794261
PR Review Comment: https://git.openjdk.org/jdk/pull/20665#discussion_r1732794721
PR Review Comment: https://git.openjdk.org/jdk/pull/20665#discussion_r1732795070


More information about the core-libs-dev mailing list